Benutzer mit den meisten Antworten
Wie kann man Spalten ausblenden, in denen nur NULL-Werte vorkommen?

Frage
Antworten
-
Hallo Jürgen,
wie gesagt, in einem SELECT Statement geht das, was Du machen willst, nicht. Das ist nunmal so.
Du kannst in einem separaten Programm (wozu dann auch SSRS und alles andere gehört) separate SQL Abfragen für die Spalten absetzen, die dann bspw. so aussehen:
SELECT COUNT( 1 ) AS Anzahl FROM <Tabelle> WHERE <Spalte> IS NOT NULL
Das machst Du dann für jede Spalte, die Du ggfs. ausblenden willst. Wenn als Rückgabe etwas > 0 kommt, ist mind. ein Wert in der Spalte nicht NULL, ansonsten sind halt eben alle NULL. Und anhand dieses Werts entscheidest Du in deiner Ausgabeanwendung, ob die Spalte angezeigt werden soll oder nicht.
Was bfuerchau wahrscheinlich meinte ist die Count Methode in SSRS selbst. Siehe dazu:
Funktionen des Berichts-Generators: Count-Funktion
Das hat aber nichts mit deinem SQL Statement zu tun.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Bearbeitet Stefan FalzModerator Sonntag, 16. Dezember 2018 11:31
- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 27. Dezember 2018 12:55
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 26. Oktober 2021 12:22
-
An Hand deiner Beispielausgabe ist mir das nun schon eher klar.
Zum Zeitpunkt des Selects weißt du nicht, welche Spalten, über alles, überhaupt leer sein werden.
Sicherlich hast du Recht, dass du erst mal die maximale Anzahl Spalten überhaupt vorsehen musst.Später im Report musst du dann über das Resultset Ergebnisse ermitteln.
Im SSRS kannst du Summenfelder, Zählfelder berechnen lassen, die auf dem Ergebnis basieren.
Z.B. ergibt COUNT(NRx) die Anzahl Werte ohne NULL. Enthält also eine Spalte komplett NULL, ist der Count dann eben 0.
Somit kann man die Spaltensichtbarkeit über die Bedingung "Count(NrX) > 0" steuern.Ähnliches kannst du programmtechnisch auch in einer Anwendungen lösen.
- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 27. Dezember 2018 12:55
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 26. Oktober 2021 12:22
Alle Antworten
-
Hallo Jürgen,
Wie kann ich diese Spalten ausblenden?
gar nicht. Zumindest nicht in deinem SELECT Statement. Entweder werden die Spalten selektiert oder eben nicht.
Diese dann auszublenden ist Sache der Anwendung, die die Daten ausgibt.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Nicht ganz korrekt.
Per "Select * " wird eben alles ausgewählt, mittels expliziter Aufzählung bekommt man eben nur die Felder, die man haben will. Dabei kann man den "*" tabellenspezifisch verwenden:
select a.*, b.F1, b.f2
from Tabelle1 a
cross apply .... b
- Bearbeitet Der Suchende Freitag, 14. Dezember 2018 08:58
-
Hallo zusammen,
danke für die Antworten.
Hier noch die Query mit Cross Apply:
SELECT A.*, B.* FROM Aufbereitung AS A CROSS APPLY ( Select Nr1 = xDim.value('/x[1]','varchar(max)') ,Nr2 = xDim.value('/x[2]','varchar(max)') ,Nr3 = xDim.value('/x[3]','varchar(max)') ,Nr4 = xDim.value('/x[4]','varchar(max)') ,Nr5 = xDim.value('/x[5]','varchar(max)') ,Nr6 = xDim.value('/x[6]','varchar(max)') ,Nr7 = xDim.value('/x[7]','varchar(max)') ,Nr8 = xDim.value('/x[8]','varchar(max)') ,Nr9 = xDim.value('/x[9]','varchar(max)') ,Nr10 = xDim.value('/x[10]','varchar(max)') From (Select Cast('<x>' + Replace(A4.Pfad,@Trenner,'</x><x>')+'</x>' as XML) as xDim) A ) AS B
Bei meinem Test waren ab Spalte Nr3 alle Werte NULL!
Gruß
Jürgen
-
Dann lass ab Spalte Nr3 doch einfach aus dem Select raus.
- Bearbeitet Der Suchende Freitag, 14. Dezember 2018 09:47
-
Nicht ganz korrekt.
Doch. Selektiere ich die Spalten, sind sie halt im Resultset enthalten. Selektiere ich sie nicht, dann nicht. Was anderes hab ich ja auch nicht geschrieben.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Alles klar.
Wie ihr aus meiner letzten Query erkennen könnt, habe ich eine Spalte 'Pfad' die unterschiedliche Strings hat, deren einzelnen Werte durch ein Trennstring '<=>' verbunden sind und deren Werte ich dann in Spalten aufteilen möchte. Nur weiß das Cross Apply nicht die maximale Anzahl an Werten, so dass ich fix 10 Spalten generiert habe, also z.B.:
Spalte 'Pfad' Ergebnis: Nr1 Nr2 Nr3 Nr4 Nr5 Nr6 Nr7 …..
A<=>B<=>C A B C NULL NULL NULL NULL
A<=>B A B NULL NULL NULL NULLWahrscheinlich kann ich dass nur über eine dynamische SQL erreichen, was dann aber wieder Schwierigkeiten bereitet, da diese Aufbereitung aus einem Ergebnis einer cte stammt. Vermutlich ist es einfacher, das ganze in der View mit dem UserControl zu lösen!?
Gruß Jürgen
-
Hallo Jürgen,
wie gesagt, das Ein- und Ausblenden von Elementen/Spalten/... ist Sache der Anwendung, die die Ausgabe vornimmt.
Um zu prüfen, ob es noch einen anderen Weg gibt, dein Vorhaben zu ermöglichen (wobei es mir unsinnig erscheint, wenn das über die Ausgabeanwendung erheblich einfacher geht) wäre es notwendig, dass Du uns sämtliche relevanten Informationen als kompaktes, lauffähiges Beispiel zur Verfügung stellst. Also bspw. die CREATE TABLE Statements, INSERT INTO Statements für alle Beispieldaten, usw.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
An Hand deiner Beispielausgabe ist mir das nun schon eher klar.
Zum Zeitpunkt des Selects weißt du nicht, welche Spalten, über alles, überhaupt leer sein werden.
Sicherlich hast du Recht, dass du erst mal die maximale Anzahl Spalten überhaupt vorsehen musst.Später im Report musst du dann über das Resultset Ergebnisse ermitteln.
Im SSRS kannst du Summenfelder, Zählfelder berechnen lassen, die auf dem Ergebnis basieren.
Z.B. ergibt COUNT(NRx) die Anzahl Werte ohne NULL. Enthält also eine Spalte komplett NULL, ist der Count dann eben 0.
Somit kann man die Spaltensichtbarkeit über die Bedingung "Count(NrX) > 0" steuern.Ähnliches kannst du programmtechnisch auch in einer Anwendungen lösen.
- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 27. Dezember 2018 12:55
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 26. Oktober 2021 12:22
-
An Hand deiner Beispielausgabe ist mir das nun schon eher klar.
Zum Zeitpunkt des Selects weißt du nicht, welche Spalten, über alles, überhaupt leer sein werden.
Sicherlich hast du Recht, dass du erst mal die maximale Anzahl Spalten überhaupt vorsehen musst.Später im Report musst du dann über das Resultset Ergebnisse ermitteln.
Im SSRS kannst du Summenfelder, Zählfelder berechnen lassen, die auf dem Ergebnis basieren.
Z.B. ergibt COUNT(NRx) die Anzahl Werte ohne NULL. Enthält also eine Spalte komplett NULL, ist der Count dann eben 0.
Somit kann man die Spaltensichtbarkeit über die Bedingung "Count(NrX) > 0" steuern.Ähnliches kannst du programmtechnisch auch in einer Anwendungen lösen.
Wie soll das denn gehen?
Mit "WHERE COUNT(Nr4) > 0" bekomme ich einen Syntaxfehler.
Mit GROUP BY … und HAVING COUNT(Nr4) bekomme ich gar keine Ergebnisse.
-
Hallo Jürgen,
wie gesagt, in einem SELECT Statement geht das, was Du machen willst, nicht. Das ist nunmal so.
Du kannst in einem separaten Programm (wozu dann auch SSRS und alles andere gehört) separate SQL Abfragen für die Spalten absetzen, die dann bspw. so aussehen:
SELECT COUNT( 1 ) AS Anzahl FROM <Tabelle> WHERE <Spalte> IS NOT NULL
Das machst Du dann für jede Spalte, die Du ggfs. ausblenden willst. Wenn als Rückgabe etwas > 0 kommt, ist mind. ein Wert in der Spalte nicht NULL, ansonsten sind halt eben alle NULL. Und anhand dieses Werts entscheidest Du in deiner Ausgabeanwendung, ob die Spalte angezeigt werden soll oder nicht.
Was bfuerchau wahrscheinlich meinte ist die Count Methode in SSRS selbst. Siehe dazu:
Funktionen des Berichts-Generators: Count-Funktion
Das hat aber nichts mit deinem SQL Statement zu tun.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Bearbeitet Stefan FalzModerator Sonntag, 16. Dezember 2018 11:31
- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 27. Dezember 2018 12:55
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 26. Oktober 2021 12:22
-
Das ist korrekt, es zielte eben auch auf die Aussage: "Das ist Sache der Anwendug und nicht des SQL's".
Je nach dem, wo der SQL seine Anwednung findet, kann man die Sichtbarkeit einer Berichtsspalte im SSRS von einer Count-Formel abhängig machen.
In einem Datengrid einer Forms/Web-Anwendung kann man die Spalte vom Inhalt abhängig dann sichtbar machen.
usw., usf.