2017-02-22 27 views
0

В таблице проекта

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 варианта имен. Таким образом, количество раз в несколько раз для каждого варианта отображает дополнительную сумму в отчете о расходах. Каков наилучший способ отфильтровать это?

ответ

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

Это работает только для меня, когда я считаю, что всегда будет Фаза 1 для каждого PID, но здесь ПИД-регулятора может иметь этап 3 или этап 2,3 или 1,2 Фаза , 3 – vap0991

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

+1

, вы должны, вероятно, изменить это на 'partition by PID order by Phase'. Если у двух проектов одинаковая цена, ваш код также обнуляет стоимость нового проекта. http://rextester.com/SSREC47137 – SqlZim

+0

Отличная точка, @SqlZim - исправлена –