質問

いくつかのテーブルに結合を書きましたが、2つのレベルの順序付けを使用してデータを注文しました。そのうちの1つは1つのテーブルの主要なキーです。

さて、このデータをソートした状態で、インラインビューと個別の節を使用してデータから複製を除外したいと思います。これが私が停滞している場所です。

私はデータをソートするか、それを明確に並べ替えることができるようですが、同時に両方とも決してありません。これを回避する方法はありますか、それとも不確実性の原則に相当する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
     )
;

外側の選択の最後に「ADA_IDによる注文」を試してみると、エラーメッセージが表示されます。

正しい解決策はありません

他のヒント

含めてみませんか ada_id 外側クエリの選択したフィールドで?

;WITH CTE AS
(
                  SELECT 
                    ada.source_tab source_tab
                  , ada.source_col source_col
                  , ada.source_value source_value
                  , ada.ada_id ada_id
                  , ROW_NUMBER() OVER (PARTITION BY [COLUMNS_YOU_WANT TO BE DISTINCT] 
                    ORDER BY [your_columns])  rn
                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 = 356441
                  AND ael.ael_type = 1
                ORDER BY 
                  CASE
                    WHEN source_tab = 'Licensed Inventory' THEN 1
                    WHEN source_tab = 'CMDB'               THEN 2
                    ELSE 3
                  END
              ,ada.ada_id ASC
)
select * from CTE WHERE rn<2

ADA_IDは外側クエリでは無意味であるようです。これらすべての値を削除して、個別のsource_tabとsource_colに煮詰めました...

注文は何になると思いますか?

各テーブルと列の最小ADA_IDが注文のドライバーになることを望んでいます(ただし、テーブル名は私には適切と思われます)

内部クエリに最小ADA_IDを含める(句ごとにグループが必要です)、それを参照して外側クエリに並べ替えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top