2017-04-04 17 views
0

ProjectIDごとに1回のみPlannedAmountを表示するようにクエリを変更すると助けが必要です。 ProjectIDを繰り返す行には、PlannedAmountがNULLである必要があります。繰り返しIDに対して列の値を1回だけリストする

ベーステーブル:

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

私はすべての繰り返しProjectIDsためPlannedAmountを繰り返したくはありません - 任意のPROJECTIDの最初の出現に - 私は一度だけ、それを示したいと思います。

答えて

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; 
関連する問題