Die Gestaltung der Daten im Voraus vereinfacht die Arbeit des Anwendungsentwicklers, vor allem, wenn er nur einen statischen Bericht ohne interaktives Bearbeiten, Sortieren oder Blättern anzeigen will - was häufig genug vorkommt.
Lievens Lösung (getrennte Auswahl der Spalten bei gleichzeitigem Einfügen von Nullen für andere Spalten, dann Prüfung auf Nullen der anderen Spalten) ist die einzige Lösung, die tatsächlich funktioniert. Irgendwie.
data1 NULL NULL
NULL 123 2011-05-24 19:42:29.577
NULL 124 2011-05-24 19:42:29.577
data2 NULL NULL
NULL 323 2011-05-24 19:42:29.577
NULL 333 2011-05-24 19:42:29.577
NULL 444 2011-05-24 19:42:29.577
NULL 673 2011-05-24 19:42:29.577
--es sei denn, die Spalte, die Sie nullen, hat bereits Nullen, in diesem Fall sind wir wieder bei Platz 0. Fügen Sie eine weitere Zeile hinzu.
INSERT INTO @Table VALUES ('data2', NULL, getdate())
Führen Sie nun die Abfrage erneut aus. Schade, Alter.
data1 NULL NULL
NULL 123 2011-05-24 19:53:36.437
NULL 124 2011-05-24 19:53:36.437
data2 NULL NULL
data2 NULL 2011-05-24 19:53:36.440
NULL 323 2011-05-24 19:53:36.440
NULL 333 2011-05-24 19:53:36.440
NULL 444 2011-05-24 19:53:36.440
Die von Roux vorgeschlagene ROLLUP-Lösung funktioniert überhaupt nicht, zumindest nicht in SQL Server. Sie macht die Dinge sogar noch schlimmer.
data1 NULL NULL
data1 NULL NULL
data1 NULL NULL
data1 123 2011-05-24 20:16:26.693
data1 124 2011-05-24 20:16:26.693
data2 NULL NULL
data2 NULL NULL
data2 NULL NULL
data2 323 2011-05-24 20:16:26.693
data2 333 2011-05-24 20:16:26.693
data2 444 2011-05-24 20:16:26.693
data2 673 2011-05-24 20:16:26.693
Pitis' ROWNUM-Lösung mag in Oracle funktionieren (ich habe es nicht ausprobiert, und es scheint, dass die Klammern am Anfang fehlen), aber der entsprechende SQL-Server-Code mit ROW_NUMBER() OVER funktioniert definitiv auch nicht gut - ungefähr so gut wie meine Grammatik und Rechtschreibung.
SELECT
ROW_NUMBER() OVER(ORDER BY [name]) AS [rown]
, name
, ''
, ''
FROM @Table
GROUP BY name
UNION ALL
SELECT ROW_NUMBER() OVER(ORDER BY [name]) + 1 AS [rown] , name, size, date
FROM @Table
produziert
data1 NULL NULL
data1 NULL NULL
data1 NULL NULL
data1 123 2011-05-24 20:16:26.693
data1 124 2011-05-24 20:16:26.693
data2 NULL NULL
data2 NULL NULL
data2 NULL NULL
data2 323 2011-05-24 20:16:26.693
data2 333 2011-05-24 20:16:26.693
data2 444 2011-05-24 20:16:26.693
data2 673 2011-05-24 20:16:26.693
Als Softwareexperte ist es Ihre Aufgabe, dafür zu sorgen, dass Milliarden von 1en und 0en an der richtigen Stelle, in der richtigen Reihenfolge und zur richtigen Zeit aufgereiht werden. Sie wissen, dass die Details, oft bis auf ein einzelnes Bit, wichtig sind.
Eine halbherzige Antwort ist schlimmer als gar keine Antwort, denn sie verschwendet die Zeit aller Beteiligten. Also... nichts für ungut, denn die Absichten sind gut, aber bitte testen Sie zumindest Ihre "Lösung", bevor Sie sie als "Lösung" veröffentlichen.
Ich wäre perfekt, wenn ich nicht so verflixt bescheiden wäre. Und selbst ich teste.
5 Stimmen
Was Sie vorhaben, sieht nach Formatierung aus, und die wird normalerweise am besten auf der Client-Seite vorgenommen.
0 Stimmen
Ja, das stimmt, aber ich spiele mit SQL und habe mich auch gefragt, ob es mit reinem SQL möglich ist :)