2017-09-27 8 views
0

結果が単一の値であるというクエリがあります。この場合、null値をもたらす多くのケースがあります。これは不要なので、別のクエリを作成して値を返します。ので、最初のクエリでnull値が結果を省略し、2番目のクエリを実行すると、私に戻って来る1つのクエリを作成する必要があります。2つのクエリから選択するnullを選択しない

firtsクエリがある

SELECT DISTINCT 
      FIRST_VALUE (pac1.pac_name) 
       OVER (ORDER BY pac1.pac_final_date DESC) 
     FROM matricula mac 
      INNER JOIN 
       periodo pac1 
      ON mac.pac_id = pac1.pac_id 
    WHERE mac.ent_id = 26172 AND mac.mac_estado IN (8072, 10221) 

2番目のクエリは、2つのクエリが同じ値を私を取り戻すが、最初私は最初のクエリのために相談する必要が

SELECT DISTINCT 
       FIRST_VALUE (pac1.pac_name) 
       OVER (ORDER BY pac1.pac_final_date DESC) 
     FROM registro rea 
       INNER JOIN 
       periodo pac1 
       ON rea.pac_id = pac1.pac_id 
     WHERE rea.ent_id = 26172 

で、2がありますケース。

場合-1 - >ときのクエリ#1を実行してくれ

結果

FIRST_VALUE (pac1.pac_name) 
-------------------------- 
|Oct/2012 - Feb/2013  | 
-------------------------- 

ケース-2結果をもたらす - >実行し、結果はnullあるクエリ#1を実行します保証するクエリ#2は、結果

私に価値をもたらす

FIRST_VALUE (pac1.pac_name) 
-------------------------- 
|Oct/2012 - Feb/2013  | 
-------------------------- 

これはおそらく簡単な質問ですが、どんな助けもありがとうございます。

+0

いくつかのサンプルデータと希望の結果を入力してください。 –

+0

説明にコメントを投稿しないでください。代わりに[編集]を使用してください。 –

+0

私はサンプル**データ**をテーブル形式で求め、その結果をテーブルとしても求めました。 –

答えて

0
SELECT COALESCE(

    (SELECT DISTINCT 
      FIRST_VALUE (pac1.pac_name) 
       OVER (ORDER BY pac1.pac_final_date DESC) 
     FROM matricula mac 
      INNER JOIN 
       periodo pac1 
      ON mac.pac_id = pac1.pac_id 
     WHERE mac.ent_id = 26172 AND mac.mac_estado IN (8072, 10221)) 

    ,(SELECT DISTINCT 
       FIRST_VALUE (pac1.pac_name) 
       OVER (ORDER BY pac1.pac_final_date DESC) 
     FROM registro rea 
       INNER JOIN 
       periodo pac1 
       ON rea.pac_id = pac1.pac_id 
     WHERE rea.ent_id = 26172)) 

私がテストデータといくつかのより多くの事をしないでポジないですが、あなたはまた、メインテーブルとしてperiodio使用することができ、その後、LEFT OUTERが、他の2つのテーブルを結合します。ケース式を使用して、どのテーブル/行を最初に使用するかを決定します。 EXISTSと同様の方法も考えられます。

SELECT DISTINCT FIRST_VALUE(pac1.pac_name) OVER (ORDER BY 
    CASE WHEN mac.pac_id IS NOT NULL THEN 0 ELSE 1 END, pac1.pac_final_date DESC) 
FROM 
    periodo pac1 
    LEFT JOIN matricula mac 
    ON pac1.pac_id = mac.pac_id 
    AND mac.ent_id = 26172 
    AND mac.mac_estado IN (8072, 10221) 
    LEFT JOIN registro rea 
    ON pac1.pac_id = rea.pac_id 
    AND rea.ent_id = 26172 
+0

です.2つのクエリの中で、私がFROMステートメントで使用しているテーブルに異なるテーブルがある場合は –

+0

@ByronFigueroaですので、COALESCEの使い方を示す答えを編集しました。サブ問合せ。関係やその他のいくつかの関係によっては、別のクエリでもこれを行うことができます。そして、実際に私はまだクエリを見ているが、もう一度、メインテーブルとしてperiodoを使用することができる条件付きの左外部の両方の他のテーブルに結合し、依然として1つのクエリでそれを取り除く – Matt

関連する問題