2012-04-01 19 views
1

Betrachtet man Oracle 10g, gibt es eine Möglichkeit, eine Spalte basierend auf angegebenen Zeilen umzubenennen?SQL: Dynamisches Umbenennen von Spalten basierend auf Zeilenwerten

Lassen Sie mich zuerst einen Hintergrund geben. Die Anforderung bestand darin, Zeilen zu drehen und sie in Spalten umzuwandeln. Da Oracle 10g die Funktion PIVOT nicht unterstützt, haben wir mit max and case Keywords gearbeitet.

Jetzt ist das Problem das. Gibt es eine Möglichkeit, eine Spalte basierend auf zwei Zeilen umzubenennen? Betrachtet man die Tabellen unter:

BRAND | MODEL | COMPONENT_NAME | COMPONENT_VALUE | ATTRIBUTE_NAME | ATTRIBUTE_VALUE 
----------------------------------------------------------------------------------- 
SAMSUNG | I9100 | Chipset  | Exynos   | frequency  | 1200  
SAMSUNG | I9100 | Screen   | Amoled   | colors   | 16M 
SAMSUNG | I9100G | Chipset  | TI OMAP4430  | frequency  | 1200  
SAMSUNG | I9100G | Screen   | Amoled   | colors   | 16M 
------------------------------------------------------------------------------------ 

Das wollen wir: mit der COMPONENT_NAME oben als COMPONENT_NAME `column header for one and the umgewandelt - ATTRIBUTE_NAME` als für einen anderen.

BRAND | MODEL | Chipset  | Chipset - frequency | Screen | Screen - colors 
------------------------------------------------------------------------ 
SAMSUNG | I9100 | Exynos  | 1200    | Amoled | 16M   
SAMSUNG | I9100G | TI OMAP4430 | 1200    | Amoled | 16M 
------------------------------------------------------------------------ 

derzeit tun wir das Folgen die die zweite Tabelle zu erzeugen:

SELECT DISTINCT BRAND, MODEL, 
MAX(CASE WHEN (COMPONENT_NAME = 'Chipset') THEN 
COMPONENT_VALUE 
END) AS "Chipset", 
MAX(CASE WHEN (COMPONENT_NAME = 'Chipset' and ATTRIBUTE_NAME = 'frequency') THEN 
ATTRIBUTE_VALUE 
END) AS "Screen", 
MAX(CASE WHEN (COMPONENT_NAME = 'Screen') THEN 
COMPONENT_VALUE 
END) AS "Screen", 
MAX(CASE WHEN (COMPONENT_NAME = 'Screen' and ATTRIBUTE_NAME = 'colors') THEN 
ATTRIBUTE_VALUE 
END) AS "Screen - colors" from table....etc. 

Gibt es eine Möglichkeit dynamisch die Spalte zu nennen?

+0

@GauravSoni notwendig wäre, wenn Sie nicht meine bearbeiten wie Sie es gerollt haben sollte zurück. Wie es ist, haben Sie gerade Grammatikfehler und unnötige In-line-Tags wieder eingeführt und nützliche Tags entfernt? – Ben

+0

@ben: Sorry dafür, eigentlich habe ich dein Editierteil nicht gesehen, vielleicht war ich bei der Bearbeitung mit deiner Bearbeitung beschäftigt. Du kannst meine Änderungen rückgängig machen. Sorry für die Unannehmlichkeiten nochmal. –

Antwort

2

Ein Spaltenname ist analog zu einem Variablennamen - es ist ein Bezeichner, der in einem Programm verwendet werden kann. Es macht wenig Sinn, dass sich der Name dynamisch ändert.

Ihre aktuelle Strategie der verschiedenen Spalten für jedes Attribut ist in Ordnung, IMO.

Sie haben den Nachteil, dass Sie ein EAV-Datenmodell haben.

+0

Wir haben die gleiche Sache umgesetzt. Aufgrund der maximalen Spaltennamenbeschränkung von Oracle haben wir jedoch einen kurzen Alias ​​für einige Spalten erstellt und diese Spalten umbenannt, bevor sie im Frontend angezeigt werden – RavenXV

Verwandte Themen