2016-07-06 5 views
2

私はこの質問をウェブサイトで見つけ出し、無用に解決しようとしていました。列名、年、件名のノーベル賞受賞者のテーブルがあります。問題は次のとおりです。1984年の受賞者と主題と受賞者名で注文したものを表示します。化学と物理を最後に挙げる。ORDER BYステートメントに条件を追加しました

私は、次のを思い付いた:

結果を与える
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 JKが、 Kahler、そしてNiels K. Jerne。

+2

あなたの 'ORDER BY'に2番目の基準を追加するだけです:' ORDER BY CASE WHEN ...... END、subject、winner' – Lamak

+0

ここではほとんどの人が指摘しているように、 'ORDER BY'節がこれを解決するはずです。しかし、私は上記のウェブサイト自体でクエリを実行しています。私は(おそらく間違っていますか?)推測しているのは、MariaDBを使用して別の出力が得られることです。いずれにしても、「ORDER BY」に「勝者」を追加すると、「被験者」列を無視した「勝者」によってのみ結果がソートされます。 私はこの質問を見つけたページです - sqlzoo.net/wiki/SELECT_from_Nobel_Tutorial - 質問No。誰かがソースについて興味がある場合に備えて、14。 – dreadnought303

+1

SQLZは 'SELECT winner、subject from nobel WHERE yr = 1984 ORDER BY件名IN( 'Physics'、 'C​​hemistry')、件名、受賞者に満足しているようです。 SQL Serverは 'IN'を' 0'または '1'を返す演算子として扱わないことに注意してください。戻り値の型は' BOOLEAN'としてリストされます。 [boolean](https://msdn.microsoft.com/en-us/library/ms188074.aspx#Anchor_0)データ型がありますが、他のSQL Serverデータ型とは異なり、ブール型のデータ型をテーブルの列または変数のデータ型として指定することはできず、結果セットで返すことはできません。 – HABO

答えて

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終わり、勝者、

誰もが言及したように、あなたは,winnerが追加されている必要があります。しかし、あなたは少しもこれを簡素化することができます。

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

'CASE'は' subject'が 'NULL'である場合、意味的に異なります。つまり、OPの' CASE'は 'NULL'値に対して' 3'を返し、リストの最後に '3'を返します。 – HABO

+0

@HABOありがとう、それは非常に真実であり、注目に値する。しかし、OPには何も言及されていないので、私は、彼がその行を削除することができなかった可能性が高いことを知り、その後、NULLとみなしていたことがわかりました –

+0

'subject'は実際にはnullableですが、この質問のうち、 'NULL'フィールドがないと仮定します – dreadnought303

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 
1

みんなありがとうをうまくいくと思います。しかし、私がコメントの1つで述べたように、これらのクエリをテストした特定のWebサイトは、ここに投稿された回答の出力を私に与えませんでした。しかし、何がうまくいったのは、HABOによって投稿されたcommentです。

関連する問題