Question

J'ai écrit une jointure sur certaines tables et j'ai ordonné les données en utilisant deux niveaux de commande -. Dont une est la clé primaire d'une table

Maintenant, avec ces données triées je veux exclure ensuite les doublons de mes données en utilisant une vue et la clause DISTINCT en ligne - et c'est d'où je viens décollée

.

Je semble pouvoir soit trier les données ou distinctes, mais jamais les deux en même temps. Est-il un moyen de contourner cela ou ai-je tombé sur l'équivalent SQL du principe d'incertitude?

Ce code renvoie les données triées, mais avec des doublons

                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;

Ce code supprime les doublons, mais je perds l'ordre ...

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
     )
;

Si je tente et inclueront « ORDER BY ada_id » à la fin de la sélection externe, je reçois le message d'erreur « ORA-01791: pas une expression selected » qui me exaspérant !!

Pas de solution correcte

Autres conseils

Pourquoi ne pas inclure ada_id les champs sélectionnés de la requête externe?

;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

il semble que le ada_id n'a pas de sens dans la requête externe. vous avez supprimé toutes ces valeurs pour faire bouillir jusqu'à la source_tab distincte et source_col ...

qu'est-ce que vous attendez de l'ordre d'être?

vous voulez peut-être le ada_id minimum pour chaque ensemble de table et de la colonne pour être le pilote de l'ordre - (bien que le nom de la table me semble approprié)

inclure le ada_id minimum dans la requête interne (vous aurez besoin d'un groupe par article) alors que référence dans la requête externe et trier dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top