我需要帮助修改我的查询,以便每个ProjectID只显示一次PlannedAmount。具有重复ProjectID的任何行都应具有null的PlannedAmount。
基准表:
+------------------------------------+ | ProjectID SegmentName CurrentMTD | +------------------------------------+ | 100 Taxes-state 20000 | | 100 Taxes-federal 100000 | | 101 Building 0 | | 102 Land 0 | | 103 Equipment 25000 | +------------------------------------+
PlannedAmounts表:
+-------------------------+ | ProjectID PlannedAmount | +-------------------------+ | 100 140000 | | 103 30000 | +-------------------------+
我的查询:
SELECT a.ProjectID, a.SegmentName, a.CurrentMTD, NVL(b.PlannedAmount, 0) as PlannedAmount
FROM Base AS a LEFT JOIN PlannedAmounts AS b ON a.ProjectID = b.ProjectID;
结果:
+---------------------------------------------------+ | ProjectID SegmentName CurrentMTD PlannedAmount | +---------------------------------------------------+ | 100 Taxes-state 20000 140000 | | 100 Taxes-federal 100000 140000 | | 101 Building 0 0 | | 102 Land 0 0 | | 103 Equipment 25000 30000 | +---------------------------------------------------+
我想要的是什么:
+---------------------------------------------------+ | ProjectID SegmentName CurrentMTD PlannedAmount | +---------------------------------------------------+ | 100 Taxes-state 20000 140000 | | 100 Taxes-federal 100000 | | 101 Building 0 0 | | 102 Land 0 0 | | 103 Equipment 25000 30000 | +---------------------------------------------------+
我不想为任何重复的ProjectID重复PlannedAmount - 我只想显示一次 - 在任何给定ProjectID的第一次出现时。
答案 0 :(得分:2)
您可以使用Case和Row_Number(),修改后的查询
SELECT a.ProjectID, a.SegmentName, a.CurrentMTD, Case when Row_number() (over partition by a.ProjectId order by a.ProjectId) = 1 then NVL(b.PlannedAmount, 0) else NULL end as PlannedAmount
FROM Base AS a LEFT JOIN PlannedAmounts AS b ON a.ProjectID = b.ProjectID;