2017-03-13 2 views
0

Lassen Sie mich darauf hinweisen, dass zuerst meine Frage auf diese Frage sehr, sehr nahe sein wird: map-column-data-to-a-value-oracleOracle - Karte Spaltendaten auf einen Wert

Bitte schnell, dass man zuerst lesen.

Jetzt in meinem Fall brauche ich genau das gleiche, aber nicht als primäre Abfrage. Stattdessen brauche ich die Informationen als einen Teil meiner Abfrage.

Ich habe diese Tabelle:

someId | someValue | dataType 
    1 | 500 | 1 
    2 | someValue | 2 

Und ich weiß, dass datatype "1" bedeutet "Integer". Ich kenne auch die Bedeutung der anderen Werte in der Spalte dataType.

Deshalb möchte ich alle Einträge in der Tabelle wählen, sondern ihre Datentypen als ihre Menschen lesbare Werte haben, anstatt ihre Zahlen:

Ergebnisse:

1, 500, Integer 
2, someString, String 

Der Versuch, die Lösung der Frage anzuwenden I verbunden ist, habe ich eine Unterabfrage wie

SELECT 
someId, 
someValue, 
(
    SELECT CASE 
    WHEN dataType = 1 THEN 'INTEGER' 
    WHEN dataType = 2 THEN 'FLOAT' 
    WHEN dataType = 3 THEN 'TEXT' 
    ELSE 'DATE' 
END 
    myTable 
) as myDataType 

ich werde eine Unterabfrage erhalten, die mehr als 1 Ergebnis und Oracle gibt wird sich beschweren.

Da ich direkt über SQL auf die DB zugreife, brauche ich eine "reine SQL" -Lösung. Ansonsten könnte ich den Wert einfach durch ein Mapping analysieren, in PHP. Aber das ist hier nicht möglich. Ich mache ein paar Anfragen bei einer Datenbank, um Informationen über die Daten und die Struktur zu sammeln, von denen wir nichts wissen. Also nur SQL ist verfügbar.

Antwort

2

Sie sich von der Unterabfrage zu befreien:

SELECT someId, 
     someValue, 
     CASE 
      WHEN dataType = 1 THEN 'INTEGER' 
      WHEN dataType = 2 THEN 'FLOAT' 
      WHEN dataType = 3 THEN 'TEXT' 
      ELSE 'DATE' 
     END as Datatype 
from myTable 
+0

Arbeiten wie ein Charme. Vielen Dank! – Worp

Verwandte Themen