我想写一个t-sql。我有一张原始表格如下。 表:
ID | ParentId | Data |Sortno|
-------|--------- |--------- |------|
1902 | 0 | 210 |1 |
1803 | 0 | 212 |2 |
1604 | 0 | 251 |3 |
1005 | 0 | 256 |4 |
1021 | 1902 | 160 |2 |
1022 | 1902 | 150 |1 |
19221 | 1022 | 90 |1 |
17222 | 1022 | 80 |2 |
13992 | 1803 | 70 |2 |
13881 | 1803 | 60 |1 |
1522 | 1902 | 150 |3 |
我想对它进行排序并获得如下结果表:
ID | ParentId| Data |Sortno|
-------|-------- |-------|------|
1902 | 0 | 210 |1 |
1022 | 1902 | 150 |1 |
19221 | 1022 | 90 |1 |
17222 | 1022 | 80 |2 |
1522 | 1902 | 150 |3 |
1021 | 1902 | 160 |2 |
1803 | 0 | 212 |2 |
13881 | 1803 | 60 |1 |
13992 | 1803 | 70 |2 |
1604 | 0 | 251 |3 |
1005 | 0 | 256 |4 |
如何在兄弟姐妹之间按sortno编写此T-SQL语句顺序?提前谢谢!
答案 0 :(得分:1)
可能不是正确的方法,但它仍然有效。将ID
列转换为Varchar
中的Order by
对您有用。
CREATE TABLE #sts
(
ID INT,
ParentId INT,
Data INT
)
INSERT INTO #sts
VALUES (12,0,210 ),
(13,0,212 ),
(14,0,251 ),
(15,0,256 ),
(121,12,160 ),
(122,12,150 ),
(1221,122,90 ),
(1222,122,80 ),
(132,13,70 ),
(131,13,60 )
SELECT *
FROM #sts
ORDER BY Cast(id AS VARCHAR(30))
<强>结果强>
ID ParentId Data
12 0 210
121 12 160
122 12 150
1221 122 90
1222 122 80
13 0 212
131 13 60
132 13 70
14 0 251
15 0 256
答案 1 :(得分:1)
SELECT *,DENSE_RANK()OVER(PARENTID ORDER BY ID)作为#STS的SORTNO 按阶段排序(ID为VARCHAR(30))