Zählen für mehrere Bereiche (1xTabelle, SQL) - (Bitte mal anschauen, danke)

Gary82

Grünschnabel
Ich weiß echt nicht weiter, darum wollte ich hier mal nachfragen, vielleicht kann mir einer freundlicherweise weiterhelfen - einfach mal anschauen, dankeschön.

Ausgangstabelle:
Code:
Zeile  Name  Vorname  unbedeutend  Bereich  Gruppe  Faelle    Datum     ATTRIBUTE				
1			624	    Bereich5	A	N	16.01.2007	2				
2			625	    Bereich1	A	N	16.01.2007	2				
3			626	    Bereich6	A	N	16.01.2007	X				
4			627	    Bereich2	A	N	16.01.2007	X				
5			628	    Bereich7	A	N	16.01.2007	1				
6			629	    Bereich1	A	N	16.01.2007	X				
7			630	    Bereich3	A	N	16.01.2007	X				
8			631	    Bereich1	B	F	15.01.2007	1				
9			632	    Bereich2	B	F	15.01.2007	X				
10			633	    Bereich2	B	F	15.01.2007	2				
11			634	    Bereich3	B	F	15.01.2007	X				
...	...	...	...	...	...	...	...	...

Ich bekomme es nur für die Einschränkung auf einen Bereich hin, möchte es aber gleich für alle Bereiche in eine jeweils neuen Spalte haben.
Frage: Geht so etwas überhaupt zu lösen, oder muss ich mir die Bereiche einzeln "herausziehen" und dann später wieder mittels Verbinden in eine Form bringen - nur wie ?
Code:
SELECT											
	  a.DATUM											
	, a.SCHICHT											
	, a.GRUPPE											
	, COUNT(a.ATTRIBUTE) AS ANZAHL_BEREICH_1							
	FROM TABELLE a											
	WHERE 
	(a.BEREICH= 'Bereich1')
	AND a.ATTRIBUTE = 'X' AND a.Faelle <> 'off'							
	GROUP BY a.DATUM, a.GRUPPE, FAELLE								
	ORDER BY a.DATUM

Sinn: Für das entsprechend gruppierte Datum / die Faelle / und die Gruppen in den Bereichen die 'X' zu zählen.

So sollte es aussehen:
Code:
Datum	Faelle Gruppe Bereich1 Bereich2	Bereich3 Bereich4 Bereich5 Bereich6 Summe
10.5	FS	 A	 1	  3	   1	    2        3	      2	     12
10.5	NS	 B	 4	  5	   1	    3	     1        5	     19
11.5	FS	 A	 8	  9	   7	    2	     6	      2	     34
11.5	NS	 B	 7	  2	   3	    3	     2	      4	     21
12.5	FS	 C	 3	  3	   1	    5	     5	      5	     22
12.5	NS	 D	 5	  2	   6	    9	     2	      5	     29
13.5	FS	 C	 9	  5	   5	    1	     1	      1	     22
13.5	NS	 D	 9	  7	   7	    3	     3	      5	     34

Hinten die Summenberechnung klappt, aber auch wieder nur als einzelne "SELECT-Abfrage" - müsste auch als zusätzliche Spalte mit dran:
Code:
SELECT											
	  a.DATUM											
	, a.SCHICHT											
	, a.GRUPPE											
	COUNT(a.ATTRIBUTE) AS SUMME										
	FROM TABELLE a											
	WHERE a.ATTRIBUTE = 'X' AND a.Faelle <> 'off'								
	GROUP BY a.DATUM, a.GRUPPE, a.FAELLE								
	ORDER BY a.DATUM
 
Hallo Garry,

das was du machen möchtest, nennt man Pivotisieren, d.h. entweder aus Ergebniszeilen Spalten erzeugen oder umgekehrt.

In deinem Fall hast du ja schon fast alles realisiert, nur die einzelnen Teilsummen für die Bereiche fehlen noch.
Das kannst du z.B. so realisieren:

SQL:
SELECT
     a.DATUM
   , a.FAELLE
   , a.GRUPPE
   , SUM(CASE WHEN a.bereich='Bereich1' THEN 1 ELSE 0 END) AS Bereich1
   , SUM(CASE WHEN a.bereich='Bereich2' THEN 1 ELSE 0 END) AS Bereich2
   , SUM(CASE WHEN a.bereich='Bereich3' THEN 1 ELSE 0 END) AS Bereich3
   , SUM(CASE WHEN a.bereich='Bereich4' THEN 1 ELSE 0 END) AS Bereich4
   , SUM(CASE WHEN a.bereich='Bereich5' THEN 1 ELSE 0 END) AS Bereich5
   , SUM(CASE WHEN a.bereich='Bereich6' THEN 1 ELSE 0 END) AS Bereich6
   , COUNT(a.ATTRIBUTE) AS SUMME
  FROM tabelle a
 WHERE a.attribute = 'X' AND a.faelle <> 'off' 
 GROUP BY a.DATUM, a.GRUPPE, a.FAELLE
 ORDER BY a.DATUM

Hoffe es hilft,

Markus
 
Mensch, super :) Danke!

Ich dachte nur eben, und deswegen hat mich das mehr irretiert als alles andere, das IF...THEN...ELSE oder CASE oder die anderen Bedingungen nur bei Prozeduren und Funktionen eingesetzt werden, aber so habe ich auch wieder was gelernt. Toll!
 

Neue Beiträge

Zurück