SQLについて学んでいるのですが、
ORDER BY で複数指定できることはわかったのですが、
SQL
1ORDER BY CASE WHEN ○○ IS NOT NULL THEN N'000' ELSE ×× END , △△
上記のように、Nプレフィックスがあることで一体何が起きているのか、
参考書等を読み返したのですがその記述がなく、
理解することができません。
例えば
|Id|CompanyId|ReceiptCategoryId|RecordedAt|ReceiptAmount|ReceiptAccountCode|ReceiptBanckCode|ReceiptBranchCode
|:--|:--:|--:|
|1|0001|11|2019-01-31|1,250|11002|001|901
|2|0001|12|2019-01-31|82,116|11002|001|901
|3|0002|35|2019-01-31|14,038|12001|005|501
|4|0002|15|2019-01-31|5,997|12004|004|401
|5|0002|23|2019-01-31|3,208|12015|009|909
|6|0002|5|2019-01-31|60,001|12097|008|801
というようなテーブル[Receipt]があるとします。
これをORDER BY句とCASE句を使用して任意のソート順にするとき、
(任意のソート:ReceiptCategoryId = 15 のものを一番上に持っていきたい、それ以外はReceiptBrachCode順)
SQL
1SELECT 2 Id 3, CompanyId 4, ReceiptCategoryId 5, RecordedAt 6, ReceiptAmount 7, ReceiptAccountCode 8, ReceiptBankCode 9, ReceiptBranchCode 10FROM 11TBL_Receipt 12WHERE CompanyId = '0002' 13ORDER BY 14CASE WHEN ReceiptCategoryId = 15 THEN 1 15ELSE ReceiptBranchCode END ,ReceiptBankCode
上記の実行結果
|Id|CompanyId|ReceiptCategoryId|RecordedAt|ReceiptAmount|ReceiptAccountCode|ReceiptBanckCode|ReceiptBranchCode
|:--|:--:|--:|
|4|0002|15|2019-01-31|5,997|12004|004|401
|3|0002|35|2019-01-31|14,038|12001|005|501
|6|0002|5|2019-01-31|60,001|12097|008|801
|1|0001|11|2019-01-31|1,250|11002|001|901
|2|0001|12|2019-01-31|82,116|11002|001|901
|5|0002|23|2019-01-31|3,208|12015|009|909
となると思います。
ここまでは問題ないです。理解できていると思っています。
問題なのは、下記のような場合です。
SQL
1SELECT 2 Id 3, CompanyId 4, ReceiptCategoryId 5, RecordedAt 6, ReceiptAmount 7, ReceiptAccountCode 8, ReceiptBankCode 9, ReceiptBranchCode 10FROM 11TBL_Receipt 12WHERE CompanyId = '0002' 13ORDER BY 14CASE WHEN ReceiptCategoryId IS NOT NULL THEN N'000' 15ELSE ReceiptBranchCode END ,ReceiptBankCode
ReceiptCategoryIdがNULL値ではないときに指定されているNプレフィックスが持つ意味がわかりません。
SQL
1ORDER BY CASE WHEN ReceiptCategoryId IS NOT NULL THEN ReceiptCategoryId ELSE ReceiptBranchCode END
(↑ReceiptCategoryIdがNULL値ではなかったとき、ReceiptCategoryId順、NULL値だったらReceiptBranchCode順)
上記ではダメな理由がわかりませんでした。
教えていただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/29 06:21