我有一个包含以下详细信息的sql server表
Cleint_ID Photo_Rank 2再评核1 1.再叙职等9 3.一般用途7 1.一般用途6 1.再评核5 1.一般用途7 3. 3.再接电话.5 1.再叙职等4 2.再培训局-3 2.再培训局2 1.再叙职等9 3.一般用途7
现在我想把所有的照片都整理好,这样第一张所有客户的照片就会显示在第一位。在所有客户端中排名第二的照片并继续
我想要结果
如果发现Cleint_ID1 highest照片排名为1 如果发现Cleint_ID2 highest照片排名为2 如果发现Cleint_ID3 highest照片排名为3 如果发现Cleint_ID1 second的最高照片等级为1 如果发现Cleint_ID2 second的最高照片等级为2 如果发现Cleint_ID3 second的最高照片等级为3
并继续
发布于 2014-11-22 18:08:06
似乎秩函数可以如下所示:
select Client_id, photo_rank, rank_ordinal
from (select Client_ID, photo_rank,
RANK() over (PARTITION BY Client_ID ORDER BY Photo_Rank) as rank_ordinal
from TableName) _
order by rank_ordinal, client_id
发布于 2014-11-22 19:25:58
试试这个:
您可以使用Max和partitions子句,它在分区之间为您提供了最大值。
select 'Client_ID' +CAST(Client_ID as VARCHAR(10)) as Client_ID ,
MAX(Photo_rank) as MaxRank from
(
select MAX(Photo_rank) over(partition by Client_ID )as RN ,*
from Mytable)D
group by Client_ID
输出
Client_ID MaxRank
Client_ID1 9
Client_ID2 3
Client_ID3 8
发布于 2014-11-22 23:46:03
--CREATE TABLE #TEMP (Cleint_ID INT)
--CREATE TABLE #ID_LIST (ID int IDENTITY(1,1) ,Cleint_ID INT,Photo_Rank INT)
INSERT INTO #TEMP (Cleint_ID )
SELECT DISTINCT Cleint_ID
FROM [SCORE]
DECLARE cur cursor FAST_FORWARD READ_ONLY
FOR
SELECT Cleint_ID
FROM #TEMP
DECLARE @d INT
OPEN cur
FETCH NEXT FROM cur INTO @d
WHILE @@FETCH_STATUS=0
BEGIN
INSERT INTO #ID_LIST (Cleint_ID,Photo_Rank)
SELECT DISTINCT TOP 3 Cleint_ID,Photo_Rank
FROM [SCORE]
WHERE Cleint_ID =@D
ORDER BY Cleint_ID,Photo_Rank DESC
FETCH NEXT FROM cur INTO @d
END
Close cur
DEALLOCATE cur
--TRUNCATE TABLE #TEMP
--TRUNCATE TABLE #ID_LIST
DECLARE @TBL TABLE (Cleint_ID INT,Photo_Rank INT)
DECLARE @ID INT=-2
DECLARE @X INT=(SELECT COUNT(*) FROM #TEMP)
WHILE @X!=0
BEGIN
WHILE @ID<=(SELECT COUNT(*) FROM #ID_LIST)
BEGIN
INSERT INTO @TBL
SELECT DISTINCT Cleint_ID,Photo_Rank FROM #ID_LIST
WHERE ID=@ID+3
SET @ID=@ID+3
END
SET @X=@X-1
SET @ID=@ID-11
PRINT @ID
END
SELECT * FROM @TBL
https://stackoverflow.com/questions/27080624
复制相似问题