2017-09-04 7 views
1

1つのSQLクエリで2つの条件を適用しようとしています。SQLクエリでCASE句を2回使用する方法

(select DISTINCT (
     CASE WHEN (
     ABC.GemUserID = '99') 
     OR ABC.GemUserID != '99' 
      THEN 'Yes' 
    ELSE 'No' 
     END)) AS AllWell 

CASEのみ下記のような1つのファイルに対して真であるように、これは私に "はい" として出力を提供します:

現在の結果:

99 , Yes 
99 , Yes 
99 , Yes 

期待される結果:

99 , No 
99 , No 
99 , Yes 

私は以下のクエリを使用していますが、SQL Query Intellisenceが間違っていると認識しています。

間違ったクエリ:

(select DISTINCT (
    CASE WHEN (ABC.GEMUserID = '99' THEN 'Yes' else 'No' 
    CASE WHEN (ABC.GEMUserID != '99' THEN 'No' else 'Yes' 

    END)) AS AllWell 

上記の間違ったクエリを固定した後:

(select DISTINCT 
     (CASE WHEN ABC.GemUserID = '99' THEN 'Yes' else 'No' END), 
     (CASE WHEN ABC.GemUserID != '99' THEN 'No' else 'Yes' END)) 
     AS AllWell 

しかし、私はエラーを取得しています:

Msg 116, Level 16, State 1, Line 17 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

この問題を解決する方法は?

+0

"内部的に"使用する場合1の場合1次に0の場合2の場合2の場合2 ELSE 0の場合END – Fabio

+5

同じことをしているように見える2つのケースステートメントはなぜですか? – spyr0

+1

サンプルデータと希望の結果をご提供ください。 –

答えて

5

select distinctは、それ自体がSQL構文の一部です。 distinctは機能ではありません。括弧の後に続けてはいけません。あなたの質問を理解できれば、

select DISTINCT 
     (CASE WHEN ABC.GEMUserID = '99' THEN 'Yes' else 'No' END), 
     (CASE WHEN ABC.GEMUserID <> '99' THEN 'No' else 'Yes' END) as AllWell 

最初の列に名前を付ける予定はありますか?

+0

お返事ありがとうございました。私は自分の質問を編集し、明確にしようとしました。あなたが指摘したように私は質問を構成しました。しかし、それは私の間違いかもしれないエラーをスローする。親切に私が間違っていることを私に告げる。ありがとう。 – DBOn

2
select DISTINCT 
CASE WHEN ABC.GEMUserID = '99' THEN 'Yes' 
    ELSE 'No' -- This is automatically When ABC.GEMUserID <> '99' 
END AS AllWell 
+0

ありがとう@Arix。私は私の質問と私の明確な要求を編集したことを見てください。 – DBOn

+0

これをどのように使用しているかについての文脈を教えてもらえますか? 2つの列が返され、そのうちの1つが数字です... 99、もう1つは 'はい'または 'いいえ'です。はいといいえをランダム化しようとしていますか? – Arix

0

このエラーによれば、より大きいSQLコマンドでは、クエリは(おそらくIN?の後ろにある)サブクエリです。したがって、そのようなサブクエリのためにはできませんto return more than one column

0

だからあなたの最初のクエリは、あなたが言った:つまり

CASE WHEN userID = 99 OR userID != 99 

CASE WHEN 1=1 

それはすべてのもの(わからないためにそう返す理由が何であるかをあなたの現在との違い予想される結果は、userIDがすべての行に対して99であることを考慮する必要があります)。

誤ったクエリの場合は、別の選択の途中でその選択を戻しているようです(最後にエイリアスするため)。そのため、ネストされた選択項目に複数の列を戻すことはできません。あなたは、このようなFROMとしてクエリに欠けている部分を保持すると仮定すると

(select DISTINCT 
    CASE WHEN ABC.GemUserID = '99' THEN 'Yes' Else 'No' End) AS AllWell 

:あなたは、単にあなたのクエリを変更する、二CASE文は必要ありません。

関連する問題