我如何只显示一次$ amount?

时间:2017-02-22 19:53:25

标签: sql sql-server

项目表

PID   ProjectName Phase PhaseName Price  
16-A  XYZ         1     Phase 1   $500
16-A  XYZ         2     Phase 2   $500
16-A  XYZ         3     Phase 3   $500
17-A  ZYX         1     Phase 1   $250
17-A  ZYX         2     Phase 2   $250

我想要一个如下所示的输出

PID   ProjectName Phase PhaseName Price  
16-A  XYZ         1     Phase 1   $500
16-A  XYZ         2     Phase 2   0
16-A  XYZ         3     Phase 3   0
17-A  ZYX         2     Phase 2   $250
17-A  ZYX         3     Phase 3   0

就像你在上表中的示例所需输出中看到的那样,我想只显示一次$的变化,因为基本上PID的成本是500美元,但PID有3个变体名称。因此,每次变化都需要多次$将在费用报表中显示额外金额。 筛选此功能的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

如果价格始终相同且总是Phase 1,那么:

select 
     PID
  ,  ProjectName
  ,  Phase
  ,  PhaseName
  ,  Price = case when Phase = 1 then Price else 0 end
from t

如果不总是Phase 1,那么我们可以使用price获取每个PID的第一个实例的row_number(),如下所示:

select 
     PID
  ,  ProjectName
  ,  Phase
  ,  PhaseName
  ,  Price = case when rn = 1 then Price else 0 end
from (
  select *
    , rn = row_number() over (
        partition by PID
        order by Phase
        )
  from t
  ) as r

答案 1 :(得分:0)

您只需要:

    select 
         PID
        ,ProjectName
        ,Phase
        ,PhaseName
        ,case when (lag(Price,1) over (partition by PID order by Phase)) = Price 
             then 0 else Price end as Price
    from project

就这么简单。你最终得到......

enter image description here