Hallo alle zusammen!
Ich habe folgendes Problem bei der Erstellung eines SELECT-Statements.
Leider werden bislang nur die Zeilen zurückgegeben, wo der COUNT > 0 ist.
Ich hätte jedoch auch gerne eine Zeile im Ergebnis-Set, wenn der Count = 0 ist.
Das meine Abfrage das richtige tut und demzufolge "logisch falsch ist", ist mir klar. Mir fehlt bislang der richtige Weg zur Umsetzung.
Die Tabelle, um die es geht, sieht vereinfacht wie folgt aus:
Mein derzeitiges Abfrage-Statement sieht wie folgt aus:
Die Funktion dbo.fn_Get_LWDaten_Archiv_TimeExtract liefert alle Datensätze im angegebenen Zeitbereich mit allen Spalten aus der Tabelle [dbo].[TBL_LWDaten_ARCHIV].
Das Ergebnis sieht wie folgt aus:
01. Aufgabe 1 3
02. Aufgabe 2 4
03. Aufgabe 3 2
04. Aufgabe 4 5
07. Pulverkabine 1 3
08. Pulverkabine 2 5
Ich möchte allerdings folgendes erreichen:
01. Aufgabe 1 3
02. Aufgabe 2 4
03. Aufgabe 3 2
04. Aufgabe 4 5
05. Strahlanlage 0
06. Vorbehandlung 0
07. Pulverkabine 1 3
08. Pulverkabine 2 5
Meine Überlegungen mit Hilfe eines JOIN einfach das Feld [letzte Lesestelle] aus der Tabelle [dbo].[TBL_LWDaten_ARCHIV]. hinzuzufügen führt zwar zu den gewünschten 0-Zeilen, allerdings auch zu falschen COUNT-Werten in den restlichen Zeilen.
Hat jemand eine Idee wie man das richtig anstellt?
Ich habe folgendes Problem bei der Erstellung eines SELECT-Statements.
Leider werden bislang nur die Zeilen zurückgegeben, wo der COUNT > 0 ist.
Ich hätte jedoch auch gerne eine Zeile im Ergebnis-Set, wenn der Count = 0 ist.
Das meine Abfrage das richtige tut und demzufolge "logisch falsch ist", ist mir klar. Mir fehlt bislang der richtige Weg zur Umsetzung.
Die Tabelle, um die es geht, sieht vereinfacht wie folgt aus:
Code:
CREATE TABLE [dbo].[TBL_LWDaten_ARCHIV] ( [ID_ARCHIV] numeric(18, 0) IDENTITY(1, 1) NOT NULL, [LW-Nr] int NOT NULL, [Sektor] int NOT NULL, [letzte Lesestelle] int NOT NULL, [Sektorzeit] datetime NOT NULL, [Leerwagen] bit NOT NULL, CONSTRAINT [TBL_LWDaten_ARCHIV_PK] PRIMARY KEY CLUSTERED ([ID_ARCHIV]) ) ON [PRIMARY] GO
Code:
SELECT top 100 PERCENT CASE l.[letzte Lesestelle] WHEN 112 THEN '01. Aufgabe 1' WHEN 120 THEN '02. Aufgabe 2' WHEN 148 THEN '03. Aufgabe 3' WHEN 156 THEN '04. Aufgabe 4' WHEN 219 THEN '05. Strahlanlage' WHEN 237 THEN '06. Vorbehandlung' WHEN 603 THEN '07. Pulverkabine 1' WHEN 703 THEN '08. Pulverkabine 2' WHEN 812 THEN '09. Pulverofen 1 HT' WHEN 819 THEN '10. Pulverofen 2 NT' END AS Position, COUNT([letzte Lesestelle]) AS [Anz LW] FROM -- Auswertungszeitraum vorgeben dbo.fn_Get_LWDaten_Archiv_TimeExtract ('18.11.2010', '10:00:00', '19.11.2010', '23:59:59') AS l WHERE (-- Aufhängestation 1..4 (l.[letzte Lesestelle] IN (112, 120, 148, 156)) AND (l.Leerwagen = 0) ) OR (-- Strahlanlage (l.[letzte Lesestelle] IN (219)) AND (l.Leerwagen = 0) ) OR (-- VBH (l.[letzte Lesestelle] IN (237)) AND (l.Leerwagen = 0) AND (Sektor = 4) ) OR (-- Pulverkabine 1..2 (l.[letzte Lesestelle] IN (603, 703)) AND (l.Leerwagen = 0) ) GROUP BY l.Sektor, l.[letzte Lesestelle], l.Leerwagen ORDER BY Position
Die Funktion dbo.fn_Get_LWDaten_Archiv_TimeExtract liefert alle Datensätze im angegebenen Zeitbereich mit allen Spalten aus der Tabelle [dbo].[TBL_LWDaten_ARCHIV].
Das Ergebnis sieht wie folgt aus:
01. Aufgabe 1 3
02. Aufgabe 2 4
03. Aufgabe 3 2
04. Aufgabe 4 5
07. Pulverkabine 1 3
08. Pulverkabine 2 5
Ich möchte allerdings folgendes erreichen:
01. Aufgabe 1 3
02. Aufgabe 2 4
03. Aufgabe 3 2
04. Aufgabe 4 5
05. Strahlanlage 0
06. Vorbehandlung 0
07. Pulverkabine 1 3
08. Pulverkabine 2 5
Meine Überlegungen mit Hilfe eines JOIN einfach das Feld [letzte Lesestelle] aus der Tabelle [dbo].[TBL_LWDaten_ARCHIV]. hinzuzufügen führt zwar zu den gewünschten 0-Zeilen, allerdings auch zu falschen COUNT-Werten in den restlichen Zeilen.
Hat jemand eine Idee wie man das richtig anstellt?
Comment