2016-12-05 15 views
0

2つのクエリがあり、値が1の場合は値があり、値が2の場合は最初のクエリが実行されます。どのように私はこれを達成することができ、私のクエリは値2大文字と小文字の2つの選択文

SELECT count (CASE WHEN col1 = 9 THEN 1 ELSE 0 END + 
       CASE WHEN col2 = 10 THEN 1 ELSE 0 END 
       )AS "matches" , 
       CAST(CASE WHEN col1 = 9 THEN 1 ELSE 0 END 
       + CASE WHEN col2 = 10 THEN 1 ELSE 0 END AS VARCHAR(10)) + '/ 2' AS "match by" 
       FrOM table a 
       where (SELECT CASE WHEN col1 = 9 THEN 1 ELSE 0 END + 
       CASE WHEN col2 = 10 THEN 1 ELSE 0 END AS "NUM_OF_MATCHES" ) >= 1 
       group by (CASE WHEN col1 = 9 THEN 1 ELSE 0 END+ 
       CASE WHEN col2 = 10 THEN 1 ELSE 0 END) 

場合、値は1つの

SELECT count (CASE WHEN col1 = 9 THEN 1 ELSE 0 END )AS "matches" , 
       CAST(CASE WHEN col1 = 9 THEN 1 ELSE 0 END AS VARCHAR(10)) + '/1' AS "match by" 
       FrOM table a 
       where (SELECT CASE WHEN col1 = 9 THEN 1 ELSE 0 END AS "matches" ) >= 1 
       group by (CASE WHEN col1 = 9 THEN 1 ELSE 0 END) 
      ) 

クエリ2であれば、私はケースを使用して、それを試してきたが、それは

に動作していない

クエリ1であります

私はif value = 1を望んでおり、次に最初のクエリが実行され、if value = 2が次に続きます

両方のクエリは同じ作業をしますが、値が1の場合、col1ロジックはcol1のみをとり、値が2の場合はcol1とcol2をとり、3の場合col1 col2とcol3をとります。

+0

If If @value = 1 ..... else if @value = 2 ... 'を使用してみてください。あなたはそれを見ることができます[ここ](https://msdn.microsoft.com/en-us/library/ms182717.aspx)。 –

答えて

2

あなたは、単純なif else ifを利用し、クエリの両方を実行することができます。.. CASE文のような単一のクエリにネストされたIIFステートメントを使用することができます。

IF(@value=1) 
    BEGIN 
     SELECT count (CASE WHEN col1 = 9 THEN 1 ELSE 0 END )AS "matches" , 
        CAST(CASE WHEN col1 = 9 THEN 1 ELSE 0 END AS VARCHAR(10)) + '/1' AS "match by" 
        FrOM table a 
        where (SELECT CASE WHEN col1 = 9 THEN 1 ELSE 0 END AS "matches" ) >= 1 
        group by (CASE WHEN col1 = 9 THEN 1 ELSE 0 END) 
       ) 
    END 
    ELSE IF(@value=2) 
    BEGIN 
     SELECT count (CASE WHEN col1 = 9 THEN 1 ELSE 0 END + 
        CASE WHEN col2 = 10 THEN 1 ELSE 0 END 
        )AS "matches" , 
        CAST(CASE WHEN col1 = 9 THEN 1 ELSE 0 END 
        + CASE WHEN col2 = 10 THEN 1 ELSE 0 END AS VARCHAR(10)) + '/ 2' AS "match by" 
        FrOM table a 
        where (SELECT CASE WHEN col1 = 9 THEN 1 ELSE 0 END + 
        CASE WHEN col2 = 10 THEN 1 ELSE 0 END AS "NUM_OF_MATCHES" ) >= 1 
        group by (CASE WHEN col1 = 9 THEN 1 ELSE 0 END+ 
        CASE WHEN col2 = 10 THEN 1 ELSE 0 END) 
    END 
+0

私はさらに質問があります。降順でそれを注文したい場合は、それは動作していません 私はレポートでそれを使用している場合は、それは集計関数は、結果を得るためのより良い方法は次のエラーを与える – Martin

-1

まだCASEステートメントを使用していますが、なぜIIFステートメントを使用しようとしないのですか?IIFステートメントはCASEステートメントより効率的かつ高速です。

select IIF(1=1, (your desired column1),(your desired column2)) as matches 

あなたも

select IIF(1=1, (IIF(2=2, (your desired column1),(your desired column2))),(your desired column3)) as matches. 
+0

IIFはSQL 2008では使用できません.SQL Server 2012から開始します。 –

+0

申し訳ありませんが、私はあなたが使用していることを認識していませんでした。 –

関連する問題