向ORDER BY语句添加条件

时间:2016-07-06 21:42:08

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

我在一个网站上发现了这个问题并试图解决它无济于事。有一个诺贝尔奖获奖者名单,列名,年份和主题。问题是:显示1984年的获奖者和主题,按主题和获胜者名称排序;但最后列出化学和物理。

我想出了以下内容:

SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY CASE
WHEN subject NOT IN ('Chemistry','Physics') THEN 1
WHEN subject IN ('Chemistry','Physics') THEN 2
ELSE 3 END

给出了结果:

winner               subject
Richard Stone        Economics
Jaroslav Seifert     Literature
Niels K. Jerne       Medicine
Georges J.F. Köhler Medicine
César Milstein      Medicine
Desmond Tutu         Peace
Bruce Merrifield     Chemistry
Carlo Rubbia         Physics
Simon van der Meer   Physics

但是,我要求每个主题的获胜者的顺序按名称进一步排序,即上面的结果应该变为Caesar Milstein为第3,接着是Georges J.K. Kahler然后是Niels K. Jerne。

5 个答案:

答案 0 :(得分:2)

只需将获胜者添加到您的订单中: -

SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY 
CASE
WHEN subject NOT IN ('Chemistry','Physics') THEN 1
WHEN subject IN ('Chemistry','Physics') THEN 2
ELSE 3 
END,
winner

答案 1 :(得分:1)

按案例排序时('化学','物理')然后1            否则0结束,获胜者,主题

答案 2 :(得分:1)

正如大家所提到的,你只需要添加,winner。但你也可以简化这一点:

ORDER BY CASE WHEN subject NOT IN ('Chemistry','Physics') THEN 1 ELSE 2 END, winner

答案 3 :(得分:1)

我认为这有效

SELECT winner, subject,CASE
WHEN subject NOT IN ('Chemistry','Physics') THEN 1
WHEN subject IN ('Chemistry','Physics') THEN 2
ELSE 3 END ord
FROM nobel
WHERE yr=1984 
ORDER BY ord,winner ASC

答案 4 :(得分:1)

感谢大家的帮助。但是,正如我在其中一条评论中所提到的那样,我在这个问题上测试过的具体网站没有给出我这里发布的答案的输出。 HABO在此the one中发布了有效的方法。