So etwas wie ... PIVOT
erfordert die gleiche Aggregatfunktion, die alle auf col angewendet werden umns; Die alte "manuelle" Art des Pivotierens mit Hilfe von Case-Ausdrücken ist flexibler (wie unten gezeigt). Ich war mir nicht sicher, was du mit "Woche" meintest - ich habe das nur in eine WHERE
Klausel geschrieben. Verwenden Sie auch keine reservierten Wörter wie DATE für Spalten- oder Tabellennamen, Sie können dies nicht direkt tun und Sie sollten es nicht auf die einzig mögliche Weise tun (doppelte Anführungszeichen) - es ist eine sehr schlechte Übung. Ich habe den Spaltennamen Date
in dt
geändert.
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
Was haben Sie versucht? Sie können einen allgemeinen Tabellenausdruck (oder geschachtelte Auswahl) verwenden, um die Zeilen zu filtern, die Sie dann verwenden möchten. PIVOT – Matt
Sind es nur diese 3 Optionen - 'Download',' Upload' oder 'Storage'? - Wenn ja, wäre es besser, wenn Sie SQL einfach direkt schreiben. –
Wenn ich Pivot verwende, wie mache ich 2 Klauseln - MAX und SUM in derselben Spalte ...? – user3359574