【问题标题】:SQL sort order based on multiple column values基于多列值的 SQL 排序顺序
【发布时间】:2011-11-07 19:41:14
【问题描述】:

我们的数据按以下格式排序。第一列是我们的系统编号,第二列是后端系统编号,第三列表示具有 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) 是主要排序,但是当有与我们的 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)中的各种编号方案和可能的有效重复值,我无法弄清楚这一点。

谢谢,

斯科特

【问题讨论】:

    标签: tsql


    【解决方案1】:
    SELECT *
    FROM @t 
    ORDER BY CASE WHEN ParentID IS NULL THEN col1 ELSE ParentID END, col2
    

    【讨论】:

    • +1,同样,使用 COALESCE 而不是 CASE:… ORDER BY COALESCE(ParentID, col1), col2
    猜你喜欢
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多