いくつかのテーブルに結合を記述し、2つのレベルの順序付けを使用してデータを順序付けました。そのうちの1つは、1つのテーブルの主キーです。
ここで、このデータを並べ替えて、インラインビューとDISTINCT句を使用して、データから重複を除外したいと思います。これが、私が行き詰まっていないところです。
データを並べ替えるか、区別することができるようですが、両方を同時に行うことはできません。これを回避する方法はありますか、それとも不確定性原理に相当するSQLに出くわしましたか?
このコードはソートされたデータを返しますが、重複しています
SELECT
ada.source_tab source_tab
, ada.source_col source_col
, ada.source_value source_value
, ada.ada_id ada_id
FROM
are_aud_data ada
, are_aud_exec_checks aec
, are_audit_elements ael
WHERE
aec.aec_id = ada.aec_id
AND ael.ano_id = aec.ano_id
AND aec.acn_id = 123456
AND ael.ael_type = 1
ORDER BY
CASE
WHEN source_tab = 'Tab type 1' THEN 1
WHEN source_tab = 'Tab type 2' THEN 2
ELSE 3
END
,ada.ada_id ASC;
このコードは重複を削除しますが、順序を失います...
SELECT DISTINCT source_tab, source_col, source_value FROM (
SELECT
ada.source_tab
, ada.source_col source_col
, ada.source_value source_value
, ada.ada_id ada_id
FROM
are_aud_data ada
, are_aud_exec_checks aec
, are_audit_elements ael
WHERE
aec.aec_id = ada.aec_id
AND ael.ano_id = aec.ano_id
AND aec.acn_id = 123456
AND ael.ael_type = 1
ORDER BY
CASE
WHEN source_tab = 'Tab type 1' THEN 1
WHEN source_tab = 'Tab type 2' THEN 2
ELSE 3
END
,ada.ada_id ASC
)
;
外側の選択の最後に「ORDERBYada_id」を含めようとすると、「ORA-01791:選択された式ではありません」というエラーメッセージが表示され、腹立たしくなります。