2016-08-23 9 views
1

私は本当にあなたを助けてくれることを願っています。 TextDANのレコードがない場合はENUを使用してください

Text | LANGUAGECODE | PRODUCT 
BlaENU | ENU   | PROD1 
BlaDAN | DAN   | PROD1 
BlaENU | ENU   | PROD2 

は、私は言語コードDANが存在する場合は、その後、他の利用ENUDANを使用し、チェックどこIちゃん、SQLの行が必要:

私はこのテーブルを持っています。どうやってやるの?

今、私は行SQLを持っていますが、DANとENUの両方のテキストが出力されます。

SELECT * 
FROM Text 
WHERE PRODUCT = 'PROD1' AND (LANGUAGECODE = 'DAN' OR LANGUAGECODE = 'ENU') 

誰でも私のSQLステートメントを手伝ってもらえますか?

+0

期待される出力? –

+1

あなたが参加することができる嗜好を表す整数を持つ言語テーブルについて/ソート/トップ1 by。 –

+0

ifが存在する – Mani

答えて

3

あなたはこのためにROW_NUMBERを使用することができます。

SELECT Text, LANGUAGECODE, PRODUCT 
FROM (
    SELECT Text, LANGUAGECODE, PRODUCT, 
     ROW_NUMBER() OVER (PARTITION BY PRODUCT 
          ORDER BY CASE 
             WHEN LANGUAGECODE='DAN' THEN 1 
             ELSE 2 
            END) AS rn 
    FROM Text 
    WHERE LANGUAGECODE IN ('DAN', 'ENU')) AS t 
WHERE t.rn = 1 

PARTITION BY句は、ユニークな製品ごとに1つの行番号のスライスを作成します。 ORDER BY節は、ENUを超えるコードDANを優先します。外側のクエリは、DAN行を選択します。存在しない場合は、ENUレコードを選択します。

関連する問題