2016-08-18 4 views
2

以下のサンプルクエリは、私がstackoverflowから得たものです。私は同じシナリオを使用しており、部分的に解決されています。2番目の列はsqlクエリでソートされていません。ここではcase文を順番に使用します。

の作業クエリ

SELECT * 
FROM Requirements 
ORDER BY 
    CASE Day 
     WHEN 'Monday' THEN 1 
     WHEN 'Tuesday' THEN 2 
     WHEN 'Wednesday' THEN 3 
     WHEN 'Thursday' THEN 4 
     WHEN 'Friday' THEN 5 
     WHEN 'Saturday' THEN 6 
     WHEN 'Sunday' THEN 7 
    END 

私のクエリの出力は以下の通りです、私のテーブルの値が重複したり、Monday1はMonday1後に戻っているが、Tuesday1は火曜日の前に戻されている理由は?

Monday  Monday 
Monday  Monday1 
Wednesday Wednesday 
Wednesday Wednesday1 
Tuesday  Tuesday 
Tuesday  Tuesday1 

ありがとう:2列値を持つ

Monday 
Monday1 
Tuesday1 
Tuesday 
Wednesday 
Wednesday1 

私のテーブルには、このように見えます。

+0

Tuesday1もMonday1をしていますあなたのケースステートメントで拾い読みされて、彼らはヌルとして評価され、一番上に出てくるはずです - また、SELECTであなたのCASEを評価してみてください。 SELECT *、CASE WHEN ...など.EN​​D AS MySortOrder FROM ... – Cato

+0

ようこそスタックオーバーフロー!あなたの質問は、あなたの質問に明快さの欠如のためにdownvoted/closedされている危険性があります。あなたが何を求めているのかを明確にするために言い換えることを検討してください。 [良い質問をするにはどうすればいいですか?](http://stackoverflow.com/help/how-to-ask) –

+0

元の列をORDER BY CASE ... END、columnname '。 – jarlh

答えて

0

最初の列のみをソートしています.2番目の列はORDER BYには含まれていません。したがって、column2がどのように順序付けされるかに関するルールはありません。 Column1は期待どおりに並べ替えられます。あなたは月曜日以降Monday1を望んでいた場合は、パラメータ

+0

私はあなたの記事に記載されているように、2番目の列を順番に追加することで解決しました。ありがとうございます。 – Chs

2

BY二ORDERとしてCOLUMN2を追加ORDER BYステートメントするMonday1となどを使用して列を追加します。

;WITH Requirements AS (
SELECT * 
FROM (VALUES 
('Monday','Monday'), 
('Monday','Monday1'), 
('Wednesday','Wednesday'), 
('Wednesday','Wednesday1'), 
('Tuesday','Tuesday'), 
('Tuesday','Tuesday1') 
) as t([day], col2) 
) 

SELECT * 
FROM Requirements 
ORDER BY 
    CASE Day 
     WHEN 'Monday' THEN 1 
     WHEN 'Tuesday' THEN 2 
     WHEN 'Wednesday' THEN 3 
     WHEN 'Thursday' THEN 4 
     WHEN 'Friday' THEN 5 
     WHEN 'Saturday' THEN 6 
     WHEN 'Sunday' THEN 7 
    END , col2 

出力:

day   col2 
Monday  Monday 
Monday  Monday1 
Tuesday  Tuesday 
Tuesday  Tuesday1 
Wednesday Wednesday 
Wednesday Wednesday1 
関連する問題