0

行が Aspez_ID 属性でランク付けされ、ASpez_ID = 1 を持つ行が 1 つだけ選択されるようにしたいと思います。問題は、データセットから 1 行だけを選択したいということです。手伝ってくれませんか?コードは次のとおりです。

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
4

1 に答える 1

2

ボブ・デュエルが説明したように、引き分けROW_NUMBER() OVER()を可能にするため、より良い代替手段になる可能性がありますRANK() OVER(). (つまり、複数のレコードが特定のランクを持つことができます: 1、1、1、4、5、6、6、8)

QUALIFY 句は、HAVING が通常の集約関数に対して行うように、ウィンドウ集約関数に対して機能します。Prioこれにより、1 または必要な値を持つレコードを返すことができます。

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

お役に立てれば。

于 2012-09-13T18:13:41.677 に答える