我希望行在Aspez_ID属性上排名,并且只选择一行ASpez_ID = 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
答案 0 :(得分:2)
正如Bob Duell解释的那样,ROW_NUMBER() OVER()
可能是更好的选择,因为RANK() OVER()
允许联系。 (即超过1条记录可以具有给定的等级: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
希望这有帮助。