を取得していないですこれは少しクリーンアップクエリ、次のとおりです。
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;
は、あなたがあなたのクエリで 'LISTAGG'を実装している方法を示し句 –
でグループを必要としています。得られた結果と期待した結果を表示します。 –
目次:1980年代のこの古い結合構文を使用しないでください。代わりに明示的な結合を使用します( 'from ... inner join ... on ...')。とにかく、あなたはそれからデータを選択しないので、他の2つのテーブルを結合する必要はないので、私は出荷テーブルに参加しません。読みやすいように、 'loc.location_gid =(出荷時にはsource_location_gidを選択してください。どこでshipment_gid =:p_shipment_id)'を使用してください。 –