Select Code für Spalten mit Nullwerten

Selmau

Neuer Benutzer
Beiträge
1
Guten Tag Zusammen

Ich habe folgendes Problem, ich möchte via SQL eine Datenbank Tabelle auslesen und in Java anzeigen. Dafür brauche ich den richtigen Code für meine Query. Ich habe nämlich eine Tabelle mit sehr vielen Spalten und Null Werten, nun möchte ich, dass wenn in einer Spalte alle Werte Null sind, die Spalte mit Select gar nicht ausgewählt werden, da so die Tabelle übersichtlicher wird. Ist jedoch nur in einer Zeile der Spalte nicht eine 0, soll diese Spalte trotzdem ausgewählt werden. Dies sollte natürlich für alle Spalten gelten.

Kann mir jemand weiterhelfen, mit welcher Funktion ich dies realisieren kann.


Besten Dank

Gruss Selmau
 
Werbung:
Das kannst du nur mit dynamischem SQL effektiv bewerkstelligen. Beispiel:
Code:
DECLARE   @query VARCHAR(8000)
SET @query = 'SELECT id' +
( CASE WHEN EXISTS ( SELECT 1 FROM tabelle WHERE spalteB IS NOT NULL THEN ',spalteB' ELSE '' END ) +
( CASE WHEN EXISTS ( SELECT 1 FROM tabelle WHERE spalteC IS NOT NULL THEN ',spalteC' ELSE '' END ) +
' FROM tabelle'
EXEC(@query)
Eine elegantere Lösung kommt mir nicht in den Sinn.
 
Werbung:
Eine andere Lösung wäre mit WITH zuerst einmal die eigentliche Tabelle zu erstellen (das erste WITH im folgenden) und darüber dann zu schauen, wie viele Elemente die Spalte enthält, die nicht NULL sind, und das als quasi 'Header' - Zeile im Ergebniss auszugeben. Die Applikation schaut also zuerst in die extra 'Headerzeile' und kann da sehen, welche Spalten da NULL haben - das zieht sich dann durch und die Applikation kann passend reagieren. Genug der Worte:

Code:
test=*# select * from foo;
 c1 | c2 | c3 | c4
----+----+----+----
  1 |  |  2 |  3
 10 |  |  | 20
(2 Zeilen)

test=*# with foo1 as (select * from foo), foo2 as (select sum(c1) as c1, sum(c2) as c2, sum(c3) as c3, sum(c4) as c4 from foo1) select * from foo2 union all select * from foo1;
 c1 | c2 | c3 | c4
----+----+----+----
 11 |  |  2 | 23
  1 |  |  2 |  3
 10 |  |  | 20
(3 Zeilen)

test=*#

Was *genau* willst Du damit erreichen? Mich beschleicht das Gefühl, daß Du ein kapottes Tabledesign hast.

Ach ja: MySQL kann kein WITH. Das kommt da erst noch. Irgendwann.
 
Zurück
Oben