2013-04-22 16 views
5

他の4つの列の値に基づく値を持つ計算列を作成しようとしています。 列1、Coulmn 2、列3は、4列はのは、進歩と呼ばれる言わせて、計算された列のいずれかで[はい]または[いいえ 最終結果である可能性があり、この線に沿って何かをする必要があります:SQL Caseステートメントで値を増やす

Progress = CASE 
WHEN [Column1] = 'Yes' THEN Value+1 
WHEN [Column2] = 'Yes' THEN Value+1 
WHEN [Column3] = 'Yes' THEN Value+1 
WHEN [Column4] = 'Yes' THEN Value+1 
ELSE 0 END 

希望これは理にかなっています明らかに上記の構文が正しくないためです。

+0

これらの列に「はい」の合計が必要ですか? – cmd

+3

あなたが本当に望むものを明確にするために、サンプルのデータと結果を提供してください。 –

+0

あなたのRDBMS(SQLフレーバー)は何ですか?それはMS SQL Serverですか? –

答えて

5

このようなサウンドは、あなたが進めていることです。

Progress = 
CASE WHEN [Column1] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column2] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column3] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column4] = 'Yes' THEN 1 ELSE 0 END 

これは、それぞれの「はい」に対して0 + 1を返します。 SQL Serverで

+0

それはうまくいった!迅速な対応に感謝します。私に悪化と時間の全体の束を保存: – user1886816

+0

@ user1886816問題はありません。良いヒントは、常に1つのCASEステートメント内に1つだけの値を入れようとすることです。 4列= 4例。 –

1

SELECT * 
FROM mytable 
CROSS APPLY 
     (
     SELECT COALESCE(SUM(CASE val WHEN 'yes' THEN 1 END), 0) 
     FROM (VALUES (NULL)) q(v) 
     UNPIVOT 
       (
       val FOR col IN 
       (column1, column2, column3, column4) 
       ) c 
     ) q (progress) 

SQLFiddleを参照してください。

+0

うわー!ありがとう、しかし、それは私の頭のすぐ上に行きました:-( – user1886816

関連する問題