Что-то вроде этого ... PIVOT
требует, чтобы такая же совокупная функция была применена ко всем ВМН; старый «ручной» способ поворота, используя выражения case, более гибкий (как показано ниже). Я не был уверен, что вы подразумеваете под «неделей» - я просто положил это в статью WHERE
. Кроме того, не используйте зарезервированные слова, такие как DATE для имен столбцов (или таблиц), вы не можете сделать это напрямую, и вы не должны делать это единственным возможным способом (используя двойные кавычки) - это очень плохая практика. Я изменил название колонки Date
на dt
.
with
input_data (customer, metricname, metricvalue, dt) AS (
select 'A', 'Upload' , 2 , to_date('10-AUG-2007', 'dd-MON-yyyy') from dual union all
select 'A', 'Download', 2 , to_date('10-AUG-2007', 'dd-MON-yyyy') from dual union all
select 'A', 'Storage' , 100 , to_date('10-AUG-2007', 'dd-MON-yyyy') from dual union all
select 'A', 'Storage' , 110 , to_date('11-AUG-2007', 'dd-MON-yyyy') from dual union all
select 'B', 'Storage' , 200 , to_date('11-AUG-2007', 'dd-MON-yyyy') from dual union all
select 'A', 'Upload' , 2 , to_date('12-AUG-2007', 'dd-MON-yyyy') from dual union all
select 'A', 'Download', 2 , to_date('12-AUG-2007', 'dd-MON-yyyy') from dual union all
select 'B', 'Upload' , 2 , to_date('10-AUG-2007', 'dd-MON-yyyy') from dual union all
select 'B', 'Download', 2 , to_date('10-AUG-2007', 'dd-MON-yyyy') from dual
)
select customer,
sum(case when metricname = 'Upload' then metricvalue end) as upload,
sum(case when metricname = 'Download' then metricvalue end) as download,
max(case when metricname = 'Storage' then metricvalue end) as storage
from input_data
where dt between to_date('09-AUG-2007', 'dd-MON-yyyy') and
to_date('15-AUG-2007', 'dd-MON-yyyy')
group by customer
order by customer
;
CUSTOMER UPLOAD DOWNLOAD STORAGE
-------- ---------- ---------- ----------
A 4 4 110
B 2 2 200
Что вы пробовали? Вы можете использовать общее табличное выражение (или вложенный выбор) для фильтрации строк, которые хотите использовать ane, а затем использовать PIVOT – Matt
. Это только те 3 варианта - 'Download',' Upload' или 'Storage'? - Если это так, вам лучше просто написать SQL напрямую. –
Если я использую pivot, как я сделаю 2 предложения - MAX и SUM на том же столбце ...? – user3359574