【问题标题】:How to sort T-SQL query output in a custom order?如何按自定义顺序对 T-SQL 查询输出进行排序?
【发布时间】:2018-10-03 05:58:02
【问题描述】:

我正在使用SQL Server 2014。我需要按特定顺序对T-SQL 查询的输出进行排序。

我尝试了以下方法,但它没有按我的预期工作。这是我的T-SQL 查询的最后一部分的摘录:

...  
GROUP BY xx.[Market]

ORDER BY CASE
WHEN xx.[Market] = 'France' THEN '1'
WHEN xx.[Market] = 'United Kingdom' THEN '2'
WHEN xx.[Market] = 'Germany' THEN '3'
WHEN xx.[Market] = 'Belgium' THEN '4'
WHEN xx.[Market] = 'Reunion' THEN '5'
WHEN xx.[Market] = 'South Africa' THEN '6'
WHEN xx.[Market] = 'Russia' THEN '7'
WHEN xx.[Market] = 'Middle East' THEN '8'
WHEN xx.[Market] = 'Central Europe' THEN '9'
WHEN xx.[Market] = 'Poland' THEN '10'
WHEN xx.[Market] = 'Scandinavia' THEN '11'
WHEN xx.[Market] = 'Netherlands' THEN '12'
WHEN xx.[Market] = 'India' THEN '13'
WHEN xx.[Market] = 'G&I' THEN '14'
WHEN xx.[Market] = 'China' THEN '15'
WHEN xx.[Market] = 'OTA' THEN '16'
WHEN xx.[Market] = 'Web Direct' THEN '17'
WHEN xx.[Market] = 'DB Local' THEN '18'
WHEN xx.[Market] = 'DB International' THEN '19'
WHEN xx.[Market] = 'Other Markets' THEN '20'

ELSE xx.[Market] END

但是,我得到以下结果:

Market               RN
France               196
Scandinavia           80
Netherlands          320
India                  2
OTA                  372
Web Direct           140
DB Local              11
DB International      25
United Kingdom     2,424
Other Markets        116
Germany              609
Belgium              350
Reunion               27
South Africa          42
Russia                 7
Central Europe        17
Switzerland           34

是不是因为某些市场没有包含在输出中?如果是,我该如何处理这个问题(因为在某些情况下,当我将查询与不同的过滤器一起使用时,可能会出现此输出中缺少的市场)?

【问题讨论】:

  • 通常大约是第十个WHEN,您应该想知道将其建模为DisplayOrder 列是否更明智(在现有表中或仅用于此目的的新表中) .
  • @Damien_The_Unbeliever 好吧,如果你必须在这个想法浮现在脑海之前写出第十个,你应该在恢复工作之前喝更多咖啡:-)

标签: sql sql-server tsql sql-order-by


【解决方案1】:

不要在 CASE 子句中使用字符串值,而是使用数值。

ORDER BY CASE
WHEN xx.[Market] = 'France' THEN 1
WHEN xx.[Market] = 'United Kingdom' THEN 2
...
ELSE 1000
END 

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2011-01-13
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多