2016-07-25 46 views
1

Ich frage mich, ob es möglich ist, einige Zeilen als Spalten in Oracle 11g anzuzeigen.Oracle SQL - Zeilen in Spalten

Ich möchte folgende

id  language  text 
-------------------------- 
1  english  some example 
1  german  an example 
2  english  test 
2  german  test123 

wie folgt dargestellt werden:

id  english  german 
--------------------------------- 
1  some example an example 
2  test   test123 

Ich versuchte pivot mit, war aber nicht in der Lage, um herauszufinden, wie man es richtig zu handhaben, da pivot erfordert eine Aggregatfunktion.

+1

Das ist der springende Punkt ist ... PIVOT selbst ist eine Aggregatfunktion; Es wird oft ohne Aggregation verwendet (mit nur einem zu schwenkenden Wert), und dann können Sie 'max()' oder 'min()' verwenden, wie vkp in seiner Lösung gezeigt hat. PIVOT wurde nicht zum Transponieren von Tabellen erstellt; Es wurde für Situationen erstellt, in denen Sie Zahlen (Dollarbeträge usw.) in der Spalte "Text" haben können, mit mehreren Zeilen pro Kombination aus "ID" und "Sprache", und Pivotieren würde verwendet, um diese Zahlen hinzuzufügen oder die Durchschnitt usw. Wenn Sie PIVOT nur zum Transponieren einer Tabelle verwenden, müssen Sie immer noch 'max()' oder 'min()' verwenden. – mathguy

Antwort

2

Angenommen, Sie haben einen Text pro Sprache pro ID, können Sie max oder min für die Textspalte in pivot verwenden.

select * from tablename 
pivot 
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN)) 

EDIT: Basierend auf OP Kommentar Ich habe Probleme, herauszufinden, wie die SELECT-Abfrage funktioniert, wenn ich will nicht alles wählt in diesem Fall. SELECT etwas, Text FROM Tabellenname oder ähnliches funktioniert nicht

Denken Sie daran, Sie sollten alle Spalten auswählen, die Sie sind pivot ing.

select * from 
(select text,language,id,something from tablename) t 
pivot 
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN)) 

Edit: Um unpivot Verwendung

select * 
from (
select * from 
(select text,language,id,something from tablename) t 
pivot 
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN)) 
) p 
unpivot (text for language in (ENGLISH, GERMAN)) 
+2

Ich glaube, das wird die Spaltennamen in Anführungszeichen setzen. Dies kann (falls gewünscht) vermieden werden, indem Aliase für jede Spalte in der Liste in der Klausel 'for language in (...)' eingefügt werden. – mathguy

+1

Sie sind richtig (Spaltennamen wären in einfachen Anführungszeichen, aber ohne die Aliase) .Ich habe die Antwort bearbeitet. –

+0

Das funktioniert, danke. Ich habe jedoch Probleme herauszufinden, wie die SELECT-Abfrage funktioniert, wenn ich in diesem Fall nicht alles auswählen möchte. 'SELECT etwas, Text FROM Tabellenname' oder ähnliches funktioniert nicht. Könnten Sie auch dafür ein Beispiel geben? – OldMcDonald