2017-09-24 7 views
-1

別の列(SelectionおよびIsAssetCode)に基づいて列(Level5)を導出しようとしています。Case文を使用するときにNULL値を取得する

Selection列には、次の2種類のエントリがある - 「すべての資産」と「コア資産を」、そしてIsAssetCode0または1です。 IsAssetCode = 0は「All Asset」に対応し、1は「Core Asset」です。

私はコア資産とノンコア資産を分けようとしていますが、Level5に「すべての資産」を含む余分な行があります。

Select *, 
    Case when Selection ='All Assets' then 'Other Assets' 
     When (IsAssetCode =1 and Selection <> 'ALL ASSETS') THEN Selection 
    End as Level5 
From ((Select (columns) from tbl where IsAssetCode = 0 
     EXCEPT 
     SELECT (Columns) FROM tbl where IsAssetCode = 1) 
     Union 
     Select (column) from tbl where IsAssetCode = 1 
    ) 

入力データ:

 
B1 Black All Assets 0 
B1 White All Assets 0 
B1 Red  All Assets 0 
B1 Black Core Asset 1 

所望の出力:

 
B1 Black Core Asset 1 
B1 White Other Asset 2 
B1 Red  Other Asset 2 
+1

を編集ご質問や、使用しているデータベースとの(1)タグを取得するために、COUNT()とGROUP BYを使用します。 (2)サンプルデータおよび所望の結果を提供する。さらに、SQLクエリは構文的に正しいものではありません( 'case'に' end'はありません)。また、NULLは列の値であり、行の状態ではありません。 –

答えて

0

常に使用RDBMSにタグを付けてください、私は、SQL-Serverのを前提としています。何の条件が満たされていないCASE EXPRESSION

デフォルト値はNULLなので、私の推測では - 「すべての資産」を持つすべての行がIsAssetCode <> 1権利を持っていますか?

CASE WHEN <Cond> Then <FirstVal> 
    WHEN <Cond2> Then <SecondVal> 
    ELSE <IfNonOfAboveVal> 
END 

それとも、すべてをキャッチする別の条件を提供します。

これをオーバーライドするには、ELSEを使用することができます。

+0

私はこれらの条件しか持っていません。 Caseステートメントで特定の条件をスキップする方法はありますか? – Sanjeet

+1

私はその質問を理解していません。 – sagi

+0

私はテーブルに4列あります – Sanjeet

0

ちょうど希望数

SELECT *, 
     CASE WHEN selection = 'All Assets' 
      THEN 'Other Assets' 
      WHEN (isassetcode = 1 AND selection <> 'All Assets') 
      THEN selection 
     END AS Level5, 
     COUNT(*) cnt 
    FROM table --or sub-query 
GROUP BY list all columns in the select that corresponds the *, 
      CASE WHEN selection = 'All Assets' 
       THEN 'Other Assets' 
       WHEN (isassetcode = 1 AND selection <> 'All Assets') 
       THEN selection 
      END 
関連する問題