2017-04-04 28 views
0

我需要幫助修改我的查詢,以便每個ProjectID只顯示一次PlannedAmount。重複ProjectID的任何行應具有空的PlannedAmount。爲重複的ID只列出一列值

基本表:

 
+------------------------------------+ 
| 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  | 
+---------------------------------------------------+ 

我不想重複PlannedAmount任何重複ProjectIDs - 我只想一次顯示它 - 在任何給定專案編號第一次出現。

回答

2

您可以使用案例和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;