Benutzer mit den meisten Antworten
Abfrage zum Zusammenfassen von Daten

Frage
-
Hallo,
mit meinen rudimentären Kenntnissen in SQL bin ich nicht in der Lage folgende Problemstellung zu lösen und ich hoffe jemand kann mir hier weiterhelfen.
Ich habe folgende Datensätze
Category;Projekt;Q1,Q2,Q3,Q4
Kommunikation;NULL;500,0000;250,0000;300,0000
Kommunikation;Projekt1;3000,0000;0;0;0
Hardware;Projekt1;2500,0000;0;0;0
Software;Projekt1;3000,0000;0;0;0
Hardware;NULL;0;0;0;200,0000in einer Tabelle und muss über eine Abfrage zu folgendem Ergebnis kommen
Category;Summe Projekte;Summe keine Projekte;Summe Gesamt
Kommunikation;3000,0000;1050,0000;4050,0000Kann mir jemand einen Tip geben wie ich die Abfrage schreiben muss, dass abhängig davon ob das Feld Project NULL beinhaltet oder nicht die Summen entsprechend gebildet werden ?
Vielen Dank im Voraus,
Stefan
Antworten
-
Hallo Stefan, das könnte man über ein Case lösen:
Create Table #daten(Category varchar(20), Projekt varchar(20), Q1 int, Q2 int, Q3 int, Q4 int); insert into #daten(Category,Projekt,Q1,Q2,Q3,Q4) values ('Kommunikation',NULL,500,250,300,0); insert into #daten(Category,Projekt,Q1,Q2,Q3,Q4) values ('Kommunikation','Projekt1',3000,0,0,0); insert into #daten(Category,Projekt,Q1,Q2,Q3,Q4) values ('Hardware','Projekt1',2500,0,0,0); insert into #daten(Category,Projekt,Q1,Q2,Q3,Q4) values ('Software','Projekt1',3000,0,0,0); insert into #daten(Category,Projekt,Q1,Q2,Q3,Q4) values ('Hardware',NULL,0,0,0,200); Select * from #daten; Select Category, sum(case when Projekt IS NOT Null then Q1+Q2+Q3+Q4 else 0 end) as [Summe Projekte] , sum(case when Projekt IS Null then Q1+Q2+Q3+Q4 else 0 end) as [Summe keine Projekte], Sum(Q1+Q2+Q3+Q4) as [Summe Gesamt] from #daten group by Category; go drop table #daten;
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
www.insidesql.org/blogs/cmu- Als Antwort markiert rgbg5 Donnerstag, 6. Oktober 2011 12:39
-
Hallo Stefan,
hier eine Lösung:
DECLARE
@Table TABLE
(
Category varchar(20) NOT NULL,
Projekt varchar(20) NULL,
Q1 float NOT NULL,
Q2 float NOT NULL,
Q3 float NOT NULL,
Q4 float NOT NULL
)
INSERT
INTO @Table
(Category, Projekt, Q1, Q2, Q3, Q4)
VALUES
('Kommunikation', NULL, 500.0000, 250.0000, 300.0000, 0),
('Kommunikation','Projekt1',3000.0000,0,0,0),
('Hardware','Projekt1',2500.0000,0,0,0),
('Software','Projekt1',3000.0000,0,0,0),
('Hardware',NULL,0,0,0,200.0000)SELECT n.Category, n.SumProjekt, m.SumProjektNull, n.SumProjekt + m.SumProjektNull AS Gesamt
FROM (
SELECT Category, Sum(Q1 + Q2 + Q3 + Q4) AS SumProjekt
FROM @Table
WHERE Projekt Is Not Null
GROUP BY Category) AS n
INNER JOIN (
SELECT Category, Sum(Q1 + Q2 + Q3 + Q4) AS SumProjektNull
FROM @Table
WHERE Projekt Is Null
GROUP BY Category) AS m
ON n.Category = m.CategoryOb Dein Datenmodell Sinn macht sei mal dahingestellt.
Gruß Thomas
- Als Antwort markiert rgbg5 Donnerstag, 6. Oktober 2011 13:08
Alle Antworten
-
Hallo Stefan, das könnte man über ein Case lösen:
Create Table #daten(Category varchar(20), Projekt varchar(20), Q1 int, Q2 int, Q3 int, Q4 int); insert into #daten(Category,Projekt,Q1,Q2,Q3,Q4) values ('Kommunikation',NULL,500,250,300,0); insert into #daten(Category,Projekt,Q1,Q2,Q3,Q4) values ('Kommunikation','Projekt1',3000,0,0,0); insert into #daten(Category,Projekt,Q1,Q2,Q3,Q4) values ('Hardware','Projekt1',2500,0,0,0); insert into #daten(Category,Projekt,Q1,Q2,Q3,Q4) values ('Software','Projekt1',3000,0,0,0); insert into #daten(Category,Projekt,Q1,Q2,Q3,Q4) values ('Hardware',NULL,0,0,0,200); Select * from #daten; Select Category, sum(case when Projekt IS NOT Null then Q1+Q2+Q3+Q4 else 0 end) as [Summe Projekte] , sum(case when Projekt IS Null then Q1+Q2+Q3+Q4 else 0 end) as [Summe keine Projekte], Sum(Q1+Q2+Q3+Q4) as [Summe Gesamt] from #daten group by Category; go drop table #daten;
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
www.insidesql.org/blogs/cmu- Als Antwort markiert rgbg5 Donnerstag, 6. Oktober 2011 12:39
-
Hallo Stefan,
hier eine Lösung:
DECLARE
@Table TABLE
(
Category varchar(20) NOT NULL,
Projekt varchar(20) NULL,
Q1 float NOT NULL,
Q2 float NOT NULL,
Q3 float NOT NULL,
Q4 float NOT NULL
)
INSERT
INTO @Table
(Category, Projekt, Q1, Q2, Q3, Q4)
VALUES
('Kommunikation', NULL, 500.0000, 250.0000, 300.0000, 0),
('Kommunikation','Projekt1',3000.0000,0,0,0),
('Hardware','Projekt1',2500.0000,0,0,0),
('Software','Projekt1',3000.0000,0,0,0),
('Hardware',NULL,0,0,0,200.0000)SELECT n.Category, n.SumProjekt, m.SumProjektNull, n.SumProjekt + m.SumProjektNull AS Gesamt
FROM (
SELECT Category, Sum(Q1 + Q2 + Q3 + Q4) AS SumProjekt
FROM @Table
WHERE Projekt Is Not Null
GROUP BY Category) AS n
INNER JOIN (
SELECT Category, Sum(Q1 + Q2 + Q3 + Q4) AS SumProjektNull
FROM @Table
WHERE Projekt Is Null
GROUP BY Category) AS m
ON n.Category = m.CategoryOb Dein Datenmodell Sinn macht sei mal dahingestellt.
Gruß Thomas
- Als Antwort markiert rgbg5 Donnerstag, 6. Oktober 2011 13:08
-
-
Deine Lösung dürfte nicht so ganz funktionieren, da hierbei Datensätze unter den Tisch fallen die es mit einem Projekt gibt aber nicht ohne Project. In dem vorliegenden Falle dürfte die Category Software nicht mit erscheinen, da dies in der FROM Klausel rausgefiltert wird.
Hallo Falk,
danke für den Hinweis. Ich hatte nicht auf die Daten an sich geachtet und bin davon ausgegangen dass es DS mit und ohne gibt.
Daher ist mein Ansatz so falsch, bitte nicht verwenden.
Gruß Thomas