首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sql server中的循环短路

Sql server中的循环短路
EN

Stack Overflow用户
提问于 2014-11-22 17:58:20
回答 3查看 137关注 0票数 0

我有一个包含以下详细信息的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

并继续

EN

回答 3

Stack Overflow用户

发布于 2014-11-22 18:08:06

似乎秩函数可以如下所示:

代码语言:javascript
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2014-11-22 19:25:58

试试这个:

您可以使用Max和partitions子句,它在分区之间为您提供了最大值。

代码语言:javascript
运行
复制
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

输出

代码语言:javascript
运行
复制
Client_ID   MaxRank 
Client_ID1  9
Client_ID2  3
Client_ID3  8
票数 0
EN

Stack Overflow用户

发布于 2014-11-22 23:46:03

  1. 用不同的CLIENT_ID创建#TEMP
  2. 使用3个最高的#ID_LIST创建Photo_Rank
  3. 用游标构建最后一个表

代码语言:javascript
运行
复制
--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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27080624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档