Tsql 基于多列值的SQL排序顺序
我们对数据进行了如下格式的排序。第一列是系统编号,第二列是后端系统编号,第三列表示ParentCol值实际上低于Col1的匹配行。(因此,第20项有两个附加部分,即第30项和第50项。) 这只是一个小例子——有时每个订单可能有数百行。从在UI中查看数据的角度来看,应用程序没有很好地处理这种情况。理想情况下,我希望对内容进行如下排序,ID号(Col1)是主要排序,但要认识到,当存在与ID匹配的ParentCol值时,后端ID号(Col2)应立即跟随:Tsql 基于多列值的SQL排序顺序,tsql,Tsql,我们对数据进行了如下格式的排序。第一列是系统编号,第二列是后端系统编号,第三列表示ParentCol值实际上低于Col1的匹配行。(因此,第20项有两个附加部分,即第30项和第50项。) 这只是一个小例子——有时每个订单可能有数百行。从在UI中查看数据的角度来看,应用程序没有很好地处理这种情况。理想情况下,我希望对内容进行如下排序,ID号(Col1)是主要排序,但要认识到,当存在与ID匹配的ParentCol值时,后端ID号(Col2)应立即跟随: Col1 Col2 Par
Col1 Col2 ParentCol
10 100 NULL
10 400 NULL
20 200 NULL
30 201 20
50 202 20
40 300 NULL
使用T-SQL,我将如何编写一个查询,根据需要返回数据?由于我们的编号方案Col1中有各种不同的编号方案和可能存在的有效重复值(但后端列Col2除外),所以我无法理解这一点
谢谢,
Scott+1也使用COALESCE而不是CASE:
…按COALESCE排序(ParentID,col1),col2
。
Col1 Col2 ParentCol
10 100 NULL
10 400 NULL
20 200 NULL
30 201 20
50 202 20
40 300 NULL
SELECT *
FROM @t
ORDER BY CASE WHEN ParentID IS NULL THEN col1 ELSE ParentID END, col2