sql - 如何按自定义顺序对 T-SQL 查询输出进行排序?
问题描述
我正在使用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
是不是因为某些市场没有包含在输出中?如果是,我该如何处理这个问题(因为当我将查询与不同的过滤器一起使用时,可能会出现此输出中缺少的市场)?
解决方案
不要在 CASE 子句中使用字符串值,而是使用数值。
ORDER BY CASE
WHEN xx.[Market] = 'France' THEN 1
WHEN xx.[Market] = 'United Kingdom' THEN 2
...
ELSE 1000
END
推荐阅读
- c - 为什么 AVR-GCC 编译器在乘法后附加“clr r1”行?
- flutter - 小部件库颤动发现的异常:在构建 PhotosList(脏,状态:_PhotosListState#c298b)时抛出了以下断言:
- reactjs - React:如何检测路线是否已更改?
- python - Python-使用唯一数字查找最近的更大数字
- traefik - 如何在 Traefik 1.7 中进行身份验证转发到后端条目
- r - 在概率模型上使用 R 的 intEff() 函数时如何处理此错误?
- javascript - 如何设置一个下拉列表的选项与另一个
- mysql - MySQL 触发器 UPDATE 另一个表
- android - AAPT:错误:资源 android:attr/popupPromptView 是私有的
- .net - MassTransit - 初始化复杂消息的最佳实践