2016-04-28 2 views
0

Tut mir leid, ich habe anscheinend eine mentale Blockade.Oracle - Wie man 2 Tabellen abfragt, um Spalten und Zeilen zu erstellen

Ich habe eine Tabelle, die wie dieses

SECTION_ID | TITLE 
------------------------- 
1    Section1 
2    Section2 
3    Section3 

und einen anderen Tisch wie diese

KPI TITLE | SECTION_ID 
---------------------------- 
Title1   1 
Title2   1 
Title3   2 
Title4   3 
Title5   3 
Title5   3 

Ich möchte kommen Sie mit den beiden Tabellen, so dass sie wie diese

aussehen sieht
Section1 | Section2 | Section3 
------------------------------ 
Title1  Title3  Title4 
Title2    Title5 
         Title6 

Die Anzahl der Abschnitte und Titel ist dynamisch, so dass ich nichts wirklich harcodieren kann.

+1

Die Anzahl der Titel ist kein Problem - ihre Anzahl kann alles sein, sie können bestellt werden, und Nullen können unten angezeigt werden. Aber die Anzahl der Abschnitte, die vorher nicht bekannt sind, ist ein Problem. Sie können dies nicht mit normalem SQL machen, Sie benötigen dynamisches SQL. Ein Beispiel (wenn die Anzahl der Ausgabespalten bekannt ist) finden Sie beispielsweise in meiner Lösung zu dieser Stack Overflow-Frage (unten auf der Seite): http://stackoverflow.com/questions/36803771/need-to-range- Mitarbeiter-Namen-nach-ihrer-Stadt-Spalte-weise/36823614 # 36823614 – mathguy

Antwort

1

Dies kann nicht ohne dynamisches SQL oder die Namen der Abschnitte im Voraus kennen. Wenn Sie die Namen kennen, können Sie etwas ähnliches mit einem Drehpunkt tun. Dies gibt nicht die exakte Ausgabe Sie gefragt, da Pivot-Daten aggregiert, aber je nachdem, was Sie versuchen, um dies zu erreichen, die für Sie tun können:

SELECT * 
FROM 
(
    SELECT T1.TITLE, T2.KPI_TITLE 
    FROM T1, T2 
    WHERE T1.SECTION_ID = T2.SECTION_ID 
) 
PIVOT (
    LISTAGG(KPI_TITLE, ', ') WITHIN GROUP (ORDER BY KPI_TITLE) 
    FOR TITLE IN ('Section1','Section2','Section3') 
) 

Der Ausgang wird sein:

Section1  | Section2 | Section3 
---------------------------------------------------- 
Title1, Title2  Title3  Title4, Title5, Title6 
Verwandte Themen