2012-09-13 3 views
0

Je voudrais que les lignes soient classées sur l'attribut Aspez_ID, et qu'une seule ligne ayant ASpez_ID = 1 soit sélectionnée. La chose est - Je veux sélectionner une et une seule ligne de l'ensemble de données. Pouvez-vous m'aider s'il vous plaît? Voici le code:Classer les lignes et en sélectionner une

LEFT OUTER JOIN (
    SELECT dwh_prozess_id 
      , ONKZ 
      , TN_NUM 
      , Aspez_Id 
      , Tarif_Cd 
      , Lokation_Id 
      , VWArt_Id 
      , Geografische_RFN_JN 
      , Herkunft_Cd 
    -- , .... Felder, die noch benötigt werden 
      , RANK (Aspez_Id) AS Prio 

    FROM DB09_Prozess.TB0911_Basis_Konfiguration 
    WHERE arbeit_cd = 'Einrichten' 
     AND phase_cd = 'Durchgeführt' 
    ) AS TB0911 
ON t1.DWH_Prozess_Id = TB0911.DWH_Prozess_Id 
    AND t1.Herkunft_Cd = TB0911.Herkunft_Cd 
+1

Voulez-vous qu'une seule ligne soit renvoyée pour la requête entière ou une ligne unique par clé (éventuellement dwh_prozess_id)? Dans les deux cas, vous devriez probablement utiliser ROW_NUMBER et non RANK. – BellevueBob

Répondre

2

Comme Bob Duell expliqué ROW_NUMBER() OVER() peut être une meilleure alternative que RANK() OVER() permet de liens. (Par exemple, plus de 1 enregistrement peut avoir un rang donné: 1,1,1,4,5,6,6,8)

La clause QUALIFY fonctionne pour les fonctions d'agrégation de fenêtre comme HAVING pour les fonctions d'agrégation normales. Cela vous permettrait de retourner des enregistrements avec un Prio de 1 ou quelle que soit la valeur que vous avez besoin.

SELECT dwh_prozess_id 
      , ONKZ 
      , TN_NUM 
      , Aspez_Id 
      , Tarif_Cd 
      , Lokation_Id 
      , VWArt_Id 
      , Geografische_RFN_JN 
      , Herkunft_Cd 
    -- , .... Felder, die noch benötigt werden 
      --, RANK (Aspez_Id) AS Prio 
      , ROW_NUMBER() OVER(PARTITION BY {partition group} /* PARTITION BY is optional */ 
           ORDER BY {ordering group}) AS Prio 

    FROM DB09_Prozess.TB0911_Basis_Konfiguration 
    WHERE arbeit_cd = 'Einrichten' 
     AND phase_cd = 'Durchgeführt' 
    QUALIFY Prio = 1 

Espérons que cela aide.

Questions connexes