【问题标题】:Specific enumerate in t-sql - SQL Servert-sql中的具体枚举 - SQL Server
【发布时间】:2018-01-03 00:26:27
【问题描述】:

有人知道如何在t-sqlenumerate 这个案例(res_enum 字段中的枚举结果):

id 编号 res_enum
1 5 1
1 5 1
2 5 1
2 5 1
3 5 1
4 1 2
4 7 3
5 7 3
5 5 4
5 5 4
6 3 5
7 5 6
7 9 7
7 9 7
7 4 8
8 4 8
8 1 9

【问题讨论】:

  • 只是检查..您是否希望 res_enum 在每次 num 更改时计数?您需要按 num 查看 row_number() 分区并按 id 排序
  • 如果没有 res_enum 列,数据集是按 id 排序的,上面没有显示另一个字段吗?看起来它是按 id 排序然后 num 但第 8/9 行 (5,7;5,5) 和最后 3 行乱序 (7,4; 8,4;8,1)。
  • SQL 表代表 无序 集合。没有固有的顺序。因此,如果行应该按特定顺序排列,则列明确需要包含该顺序。
  • 试试我的答案,希望对您有所帮助。

标签: sql sql-server enumerate


【解决方案1】:

试试这个答案。

DECLARE @TABLE TABLE(ID INT, NUM INT)

INSERT INTO @TABLE VALUES(1,5)
INSERT INTO @TABLE VALUES(1,5)
INSERT INTO @TABLE VALUES(2,5)
INSERT INTO @TABLE VALUES(2,5)
INSERT INTO @TABLE VALUES(3,5)
INSERT INTO @TABLE VALUES(4,1)
INSERT INTO @TABLE VALUES(4,7)
INSERT INTO @TABLE VALUES(5,7)
INSERT INTO @TABLE VALUES(5,5)
INSERT INTO @TABLE VALUES(5,5)
INSERT INTO @TABLE VALUES(6,3)
INSERT INTO @TABLE VALUES(7,5)
INSERT INTO @TABLE VALUES(7,9)
INSERT INTO @TABLE VALUES(7,9)
INSERT INTO @TABLE VALUES(7,4)
INSERT INTO @TABLE VALUES(8,4)
INSERT INTO @TABLE VALUES(8,1)

SELECT T1.ID,T1.NUM,SUM(CASE WHEN T1.NUM=t2.NUM THEN 0  ELSE 1 END) OVER(ORDER BY T1.RN)[res_enum]
FROM (
    SELECT *,ROW_NUMBER() OVER(ORDER BY ID)RN 
    FROM @TABLE
    ) T1
LEFT JOIN (
    SELECT *,ROW_NUMBER() OVER(ORDER BY ID)RN 
    FROM @TABLE
    ) T2 ON T1.RN=T2.RN+1

结果:

ID          NUM         res_enum
----------- ----------- -----------
1           5           1
1           5           1
2           5           1
2           5           1
3           5           1
4           1           2
4           7           3
5           7           3
5           5           4
5           5           4
6           3           5
7           5           6
7           9           7
7           9           7
7           4           8
8           4           8
8           1           9

希望这是你需要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    相关资源
    最近更新 更多