Tsql 基于多列值的SQL排序顺序

Tsql 基于多列值的SQL排序顺序,tsql,Tsql,我们对数据进行了如下格式的排序。第一列是系统编号,第二列是后端系统编号,第三列表示ParentCol值实际上低于Col1的匹配行。(因此,第20项有两个附加部分,即第30项和第50项。) 这只是一个小例子——有时每个订单可能有数百行。从在UI中查看数据的角度来看,应用程序没有很好地处理这种情况。理想情况下,我希望对内容进行如下排序,ID号(Col1)是主要排序,但要认识到,当存在与ID匹配的ParentCol值时,后端ID号(Col2)应立即跟随: Col1 Col2 Par

我们对数据进行了如下格式的排序。第一列是系统编号,第二列是后端系统编号,第三列表示ParentCol值实际上低于Col1的匹配行。(因此,第20项有两个附加部分,即第30项和第50项。)

这只是一个小例子——有时每个订单可能有数百行。从在UI中查看数据的角度来看,应用程序没有很好地处理这种情况。理想情况下,我希望对内容进行如下排序,ID号(Col1)是主要排序,但要认识到,当存在与ID匹配的ParentCol值时,后端ID号(Col2)应立即跟随:

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