2017-06-27 1 views
-1

Ich brauche die folgende Auswahl Ergebnisse in einzelne Zeilen umgewandelt werden,konvertieren Zeilen in Spalt in db2

tatsächlicher Ausgang:

ORDER POSTCODE Quantity Value 
123456 AAAAA  22.78  5 
123456 AAAAA  2.93   7 

Erwartete Ausgabe:

ORDER POSTCODE AmbientQuantity Ambientvalue FVQuantity FvVAlue 
123456 AAAAA  22.78   5   2.93  7 

Wie das zu erreichen, erwartete Ausgabe in db2?

Antwort

0

Nach SQL die Arbeit machen wird:

with temp as (
select ORDER, POSTCODE, QUANTITY, VALUE, 
     rownumber() over (partition by ORDER, POSTCODE) as rownum 
    FROM mytable2 
) 
select ORDER, POSTCODE, 
     max(case when rownum = 1 Then QUANTITY end) as AMBIENTQUANTITY, 
     max(case when rownum = 1 Then VALUE end) as AMBIENTVALUE, 
     max(case when rownum = 2 Then QUANTITY end) as FVQuantity, 
     max(case when rownum = 2 Then VALUE end) as FVVALUE 
    from temp 
group by ORDER, POSTCODE 
+0

Dank Michael. Das obige SQL hat wie erwartet funktioniert. –

+0

Großartig - also bitte als Antwort markieren - danke – MichaelTiefenbacher

0

versuchen somthing wie folgt aus:

with tmp as (

select f0.*, rownumber() over(partition by f0.ORDER, f0.POSTCODE) rang 
from your table f0 
) 

select 
f1.ORDER, f1.POSTCODE, f1.Quantity AmbientQuantity, f1.Value Ambientvalue, 
f2.Quantity FVQuantity2, f2.Value FvVAlue2, 
f3.Quantity FVQuantity3, f2.Value FvVAlue3, 
f4.Quantity FVQuantity4, f2.Value FvVAlue4 

from tmp f1 
left outer join tmp f2 on (f1.ORDER, f1.POSTCODE)=(f2.ORDER, f2.POSTCODE) and f2.rang=2 
left outer join tmp f3 on (f1.ORDER, f1.POSTCODE)=(f3.ORDER, f3.POSTCODE) and f3.rang=3 
left outer join tmp f4 on (f1.ORDER, f1.POSTCODE)=(f4.ORDER, f4.POSTCODE) and f4.rang=4 
where f1.rang=1