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

时间:2011-11-07 19:41:15

标签: tsql

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

Col1      Col2      ParentCol
10        100       NULL
20        200       NULL
30        201       20
40        300       NULL
50        202       20
10        400       NULL
...

这只是一个小例子 - 每个订单有时会有数百行。从查看UI中的数据的角度来看,应用程序不能很好地处理这种情况。理想情况下,我希望将内容排序为这样,我们的ID号(Col1)是主要的排序,但是当有一个ParentCol值与我们的ID匹配时,会认识到后端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),我无法弄清楚这一点。

谢谢,

斯科特

1 个答案:

答案 0 :(得分:2)

SELECT *
FROM @t 
ORDER BY CASE WHEN ParentID IS NULL THEN col1 ELSE ParentID END, col2