2016-07-12 4 views
0

У меня есть набор данных:Oracle SQL Pivot с запретами

SELECT * FROM costings 

Выход:

section von   part price 
5  2013000043 3019 -15000 
5  2014000041 1547 18000 
5  2014000041 3019 -15000 
5  2014000071 1547 18000 
5  2014000071 3019 -15000 
5  2016000018 1547 12000 
5  2016000018 3019 -10000 
5  2014000081 1549 3244.8 
5  2014000081 3019 -1474 
5  2015000040 1549 3244.8 
5  2015000040 3019 -1474 
5  2016000021 1549 2506.8 
5  2016000021 3019 -1474 
6  2013000069 1566 5760 
6  2013000069 3013 -4800 
6  2013000128 1566 7200 
6  2013000128 3013 -6000 
6  2014000060 1566 5760 

И я хочу, чтобы вывести данные с помощью шарнира, как это:

section 1547 1549 1566 
5  -40000 -4422 null 
6  null null -10800 

Теперь логика ожидаемых значений составляет то, что на von у вас есть несколько номеров part.

Так, например, 2014000041 имеет 1547 & 3019.

Что я хочу, начиная с 15 быть заголовок Откинуть part номер, но SUM только суммировать цены, где part не начинается с 15.

ответ

2

Если вы знаете, значения, которые начинаются с «15», то одна идея состоит в том, чтобы предварительно агрегат по section/von, а затем повторно совокупный результат:

select section, 
     sum(case when part15 = '1547' then price_not15 end) as part_1547, 
     sum(case when part15 = '1549' then price_not15 end) as part_1549, 
     sum(case when part15 = '1566' then price_not15 end) as part_1566 
from (select section, von, 
      max(case when part like '15%' then part end) as part15, 
      sum(case when part not like '15%' then price end) as price_not15 
     from costings 
     group by section, von 
    ) c 
group by section; 

Это предполагает, что есть только одна часть, начинающаяся с 15 для каждого section/von комбинация.