2017-04-25 16 views
1

SQL Serverを使用してクエリにcaseステートメントを追加しようとしています。私は基本的に次の表を与える一時的なテーブル#Step1に選択した非常に長いクエリを持っていました。ここSQL ServerでCaseステートメントを選択する

+---+------------+-------------+-----------------+---------------+ 
| |  LOB | TechPrem | Label   | Data   | 
+---+------------+-------------+-----------------+---------------+ 
| 1 | AOP  | Yes   | ADjAAL   | 40331  | 
| 1 | Boiler  | Yes   | AdjAAL   |  0   | 
| 1 | TRIA  | NO   | AdjAAL   |  0   | 
| 1 | AOP  | Yes   | PureAAL  | 11904  | 
| 1 | Boiler  | Yes   | PureAAL  |  775  | 
+---+------------+-------------+---------------- +---------------+ 

私の疑いで、上記の表を見て、私は '、そうでない場合は、「TechPrem」は「はい」AOP &ボイラーのためであれば、その後、私のクエリ1が実行すべきcase文を選択しますAOP &ボイラーの場合、「TechPrem」は「No」、その後はQuery 2が実行されます。いいえ」

SELECT 
    FileID, 
    SUM(CAST(REPLACE(Data,',','.') AS FLOAT)) AS Summed_AAL_Attri 
FROM 
    (SELECT 
     *, 
     row_number() over (partition by FileID, "LOB" ORDER BY "Label" ASC) as rn 
    FROM 
     DATA WITH (NOLOCK) 
    WHERE 
     Label IN ('AdjAAL','PureAAL') 
     AND LOB IN ('AOP', 'Boiler', 'TRIA')) AS t 
WHERE 
    t.rn = 1 
    AND FileID = 1 
GROUP BY 
    FileID 

予想される答えの場合:

SELECT 
    FileID, 
    SUM(CAST(REPLACE(Data,',','.') AS FLOAT)) AS Summed_AAL_Attri 
FROM 
    (SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY FileID, "LOB" ORDER BY "Label" ASC) AS rn 
    FROM 
     DATA WITH (NOLOCK) 
    WHERE 
     Label IN ('AdjAAL') 
     AND LOB IN ('AOP', 'Boiler', 'TRIA')) AS t 
WHERE 
    t.rn = 1 
    AND FileID = 1 
GROUP BY 
    FileID 

期待答えると、 'はい':403301

クエリ2この上の任意の提案や考えは

クエリ1、参考になります':41106

+0

文字列リテラルがあるため、これらのROW_NUMBER関数は正しく機能しません。引用符を取り出してください。また、NOLOCKを使用してクエリを処理する前に、この記事を参照する必要があります。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/手元の質問は...あなたが何を望んでいるのか分かりません。期待される出力はサンプルのデータと一致しません。 –

+1

質問は私には分かりません – Paparazzi

+0

@パパラッチも私も。この質問は嫌です! – Caltor

答えて

1

大文字と小文字を区別しない別のクエリを実行すると、SQL Serverただし、サブクエリのWHERE句でこれらのクエリに1つの違いしか見られないため、そこにcase文を使用できます。

SELECT 
    FileID, 
    SUM(CAST(REPLACE(Data,',','.') AS FLOAT)) AS Summed_AAL_Attri 
FROM 
    (SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY FileID, "LOB" ORDER BY "Label" ASC) AS rn 
    FROM 
     DATA WITH (NOLOCK) 
    WHERE 
     Label IN ('AdjAAL', CASE TechPrem 
      WHEN 'YES' THEN '' 
      WHEN 'NO' THEN 'PureAAL' 
      END) 
     AND LOB IN ('AOP', 'Boiler', 'TRIA')) AS t 
WHERE 
    t.rn = 1 
    AND FileID = 1 
GROUP BY 
    FileID