2016-11-19 1 views
-1

Ich habe eine Tabelle: city_nameWie ändert man Spalten mit Zeilen in db2 mit Join und Zeilennummer?

Need smth wie diese zu bekommen: city_n1n2n3

ich schon eine Lösung haben, sondern müssen es Joins und row_number machen():

wählen Stadt , coalesce (max (case, wenn id_name = 1 dann name end), 'nobody') als name1, coalesce (max (fall wenn id_name = 2 dann name end), 'nobody') als name2, coalesce (max (fall wenn id_name = 3 dann name end), 'nobody') als name3 von city_name Gruppe für Stadt Reihenfolge für Stadt desc

Vielen Dank im Voraus.

+0

Sie eine wirklich gute Lösung bekommen haben Warum suchst du etwas anderes? – MichaelTiefenbacher

+0

, weil mein Lehrer mir eine Aufgabe gab, um dieses Problem mit Joins und row_number zu lösen :) –

Antwort

0

Hier ist eine Lösung mit einem rownumber aber es ist nicht die beste Lösung, weil man im Voraus nicht wissen, wie viele Nutzer (und damit die Spalte können Sie haben)

with cityuserwithrow as (
select f1.*, rownumber() over(partition by f1.city order by f1.name) as rang 
from city_name f1 
) 
select distinct f0.city, 
ifnull(f1.name, 'NOBODY') as NAME1, 
ifnull(f2.name, 'NOBODY') as NAME2, 
ifnull(f3.name, 'NOBODY') as NAME3 
from city_name f0 
left outer join cityuserwithrow f1 on (f0.city, 1)=(f1.city, f1.rang) 
left outer join cityuserwithrow f2 on (f0.city, 2)=(f2.city, f2.rang) 
left outer join cityuserwithrow f3 on (f0.city, 3)=(f3.city, f3.rang) 
Verwandte Themen