2016-05-24 11 views
-1

i eine Abfrage schreiben möchten auszuwählen, die mich Anzahl der Spalten nach Zustand dynamisch zu bekommen erlaubt ist, ist es das, was ich suche:wie Spaltentabelle dynamisch mit Spaltenbedingung

select column1,column2,column3 , columncond from table , if : columncond = 'true' 
select column4,column5 , columncond from table ,if : columncond = 'false' 

, wie ich machen kann diese Logik in einer Abfrage und mein Ergebnis dynamisch nach dem Wert von Spalte-Sekunde (wahr oder falsch), verwende ich Oracle.

danke im voraus.

+1

Die Anzahl der Spalten muss bekannt sein, wenn die Abfrage analysiert wird; Sie können keine einzige SQL-Abfrage haben, die die Anzahl der Spalten in der Auswahlliste variiert. (Sie können dynamisches SQL verwenden, das das Parsing verzögert, oder Ihr Client muss die Abfrage dynamisch erstellen; ich glaube jedoch nicht, dass Sie das wollen). Wie weiß der Anrufer, wie viele Spalten zu erwarten sind und wie sie zu verarbeiten sind? Können Sie Pseudo-Null-Spalten einfügen, damit die Auswahllisten die gleiche Anzahl (und Typen) von Spalten haben? –

+0

Hallo Alex, danke für deine Antwort, ich habe mein Problem gelöst, indem ich die ganze Spalte ausgewählt habe, und wenn ich etwas anderes in meinem Client gemacht habe. – James

Antwort

3

Sie können keine einzige Abfrage haben, die verschiedene Zeilen mit unterschiedlicher Anzahl von Spalten zurückgibt; Alle Zeilen einer einzelnen Abfrage müssen die gleiche Anzahl und den gleichen Typ von Spalten haben.

Sie könnten eine Abfrage schreiben, die eine feste Anzahl von Spalten zurückgibt, aber mit NULL in den Spalten, die Sie nicht möchten, basierend auf einer Bedingung.

Zum Beispiel:

SELECT CASE WHEN columncond = 'true' THEN column1 ELSE column4 END, 
     CASE WHEN columncond = 'true' THEN column2 ELSE column5 END, 
     CASE WHEN columncond = 'true' THEN column3 ELSE NULL END, 
     columncond 
    FROM your_table 
+0

Ja, er kann, mit dynamischen SQL .. – sagi

+0

Es scheint, dass das OP eine Abfrage mit einer anderen Anzahl von Spalten in verschiedenen Zeilen, innerhalb einer einzigen Abfrage will; Bearbeiten meiner Antwort zu klären – Aleksej

+0

Hallo Leute, danke für Ihre Antwort Ich löste mein Problem, indem Sie alle Spalten auswählen, und einige, wenn sonst in meinem Client. – James

0

Verwenden wo

select column1,column2,column3 , columncond 
from table 
where columncond = 'true'; 

select column4,column5 , columncond 
from table 
where columncond = 'false'; 
Verwandte Themen