2017-01-09 11 views
0

私は4つの値を連結していて、それは私のために働いていますが、今は列の1つ(ADDRESS_LINE)に対して2つの値があり、すべて連結したい。2行の値を連結する方法

(SELECT LDR.ADDRESS_LINE 
    || ' , ' 
    || LOC.CITY 
    ||' , ' 
    || LOC.postal_code 
    ||' , ' 
    || LOC.country_code3_gid 
FROM LOCATION LOC, 
    LOCATION_ADDRESS LDR, 
    SHIPMENT SH 
WHERE SH.SOURCE_LOCATION_GID = LOC.LOCATION_GID 
AND LOC.LOCATION_GID   = LDR.LOCATION_GID 
AND SH.SHIPMENT_GID   = :P_SHIPMENT_ID 
) 

ここでADDRESS_LINEには、同じクエリに含める3つの値があります。

は、私たちはLISTAGGでこれを達成することができます知っているが、どういうわけか、私は正しい結果

+0

は、あなたがあなたのクエリで 'LISTAGG'を実装している方法を示し句 –

+0

でグループを必要としています。得られた結果と期待した結果を表示します。 –

+0

目次:1980年代のこの古い結合構文を使用しないでください。代わりに明示的な結合を使用します( 'from ... inner join ... on ...')。とにかく、あなたはそれからデータを選択しないので、他の2つのテーブルを結合する必要はないので、私は出荷テーブルに参加しません。読みやすいように、 'loc.location_gid =(出荷時にはsource_location_gidを選択してください。どこでshipment_gid =:p_shipment_id)'を使用してください。 –

答えて

0

を取得していないですこれは少しクリーンアップクエリ、次のとおりです。

SELECT (LDR.ADDRESS_LINE || ' , ' || LOC.CITY ||' , ' || 
     LOC.postal_code ||' , ' || LOC.country_code3_gid 
     ) 
FROM LOCATION LOC JOIN 
    LOCATION_ADDRESS LDR 
    ON LOC.LOCATION_GID = LDR.LOCATION_GID JOIN 
    SHIPMENT SH 
    ON SH.SOURCE_LOCATION_GID = LOC.LOCATION_GID 
WHERE SH.SHIPMENT_GID = :P_SHIPMENT_ID; 

サンプルデータと望ましい結果は何を明らかにするでしょうがあなたは本当に欲しい。以下は合理的な投機についてのいくつかのアイデアです。

あなたはlistagg()を使用することにより、単一のラインにこれ​​らを組み合わせることができます。

SELECT LISTAGG(LDR.ADDRESS_LINE || ' , ' || LOC.CITY ||' , ' || 
       LOC.postal_code ||' , ' || LOC.country_code3_gid, 
       ';' 
      ) WITHIN GROUP (ORDER BY ?) 
FROM LOCATION LOC JOIN 
    LOCATION_ADDRESS LDR 
    ON LOC.LOCATION_GID = LDR.LOCATION_GID JOIN 
    SHIPMENT SH 
    ON SH.SOURCE_LOCATION_GID = LOC.LOCATION_GID 
WHERE SH.SHIPMENT_GID = :P_SHIPMENT_ID; 

?は、アドレスラインの順序を指定する列にあります。

これは、オーバーフローする文字列の影響を受けやすいことに注意してください。また、GROUP BYが必要な場合もあります。あなたは同じ都市内のすべてのアドレスラインを望んでいた場合は、行うことができます:LISTAGGが動作するために

SELECT LISTAGG(LDR.ADDRESS_LINE || ' , ' || LOC.CITY ||' , ' || 
       LOC.postal_code ||' , ' || LOC.country_code3_gid, 
       ';' 
      ) WITHIN GROUP (ORDER BY ?) 
FROM LOCATION LOC JOIN 
    LOCATION_ADDRESS LDR 
    ON LOC.LOCATION_GID = LDR.LOCATION_GID JOIN 
    SHIPMENT SH 
    ON SH.SOURCE_LOCATION_GID = LOC.LOCATION_GID 
WHERE SH.SHIPMENT_GID = :P_SHIPMENT_ID 
GROUP BY LOC.CITY, LOC.postal_code, LOC.country_code3_gid; 
関連する問題