2016-09-29 8 views
1

複数の結合ステートメントを使用して2つのSQLクエリを作成しました。2つのSQLクエリを1つにまとめて、重複列を削除します。

ここで、両方のクエリ結果を以下のように組み合わせたいと思います。 最初のクエリは、2番目のクエリは、これらの列のクエリUDC_IDEXT_ID列の両方において

UDC_ID, EXT_ID, VALUE 

が同じであるが、それぞれにVALUE列は異なる

で示す

UDC_ID, EXT_ID, VALUE 

これらの列を示しています最終的な出力は、

UDC_ID, EXT_ID, VALUE (From Query1), VALUE (from Query 2) 
です。

これはどのように達成することができますか?

これらは私のクエリです:

クエリ1は、3つのテーブル結合します

SELECT 
    DEV.UDC_ID, 
    SR.EXT_ID, 
    SRA.VALUE 
FROM SERVICE_REQUEST SR 
JOIN DEVICE DEV 
    ON SR.DEVICE_ID = DEV.ID 
JOIN SERVICE_REQUEST_ATTR SRA 
    ON SR.ID = SERVICE_REQUEST_ID 
WHERE SR.SUB_TYPE_CD = 'HMI_22' 
--AND DEV.SUB_TYPE = 'ESME' 
AND SRA.NAME = 'CommsHubGUID' 
AND SR.INSERT_TIME >= TO_DATE('2016-09-21 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
AND SR.INSERT_TIME <= TO_DATE('2016-09-28 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
ORDER BY SR.INSERT_TIME DESC; 

クエリ1との違いをして、このクエリは、そうでない場合は、クエリの両方が同じである、SRA.NAMEフィールドのwhere句の基準です。

SELECT 
    DEV.UDC_ID, 
    SR.EXT_ID, 
    SRA.VALUE 
FROM SERVICE_REQUEST SR 
JOIN DEVICE DEV 
    ON SR.DEVICE_ID = DEV.ID`enter code here` 
JOIN SERVICE_REQUEST_ATTR SRA 
    ON SR.ID = SERVICE_REQUEST_ID 
WHERE SR.SUB_TYPE_CD = 'HMI_22' 
--AND DEV.SUB_TYPE = 'ESME' 
AND SRA.NAME = 'Service Location' 
AND SR.INSERT_TIME >= TO_DATE('2016-09-21 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
AND SR.INSERT_TIME <= TO_DATE('2016-09-28 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
ORDER BY SR.INSERT_TIME DESC 

答えて

1
SELECT COALESCE(q1.UDC_ID,q2.UDC_ID), 
     COALESCE(q1.EXT_ID, q2.EXT_ID), 
     q1.VALUE , 
     q2.VALUE 
FROM (query 1) q1 
    FULL OUTER JOIN (query 2) q2 ON q1.UDC_ID=q2.UDC_ID and q1.EXT_ID=q2.EXT_ID 
関連する問題