Datensätze verbinden

Jack123

Neuer Benutzer
Beiträge
4
Hallo,
Ich habe ein (bestimmt ganz einfaches) Problem:
In einer Datenbank gibt es eine Kopftabelle mit Projekten Projekt + ID
Darunter (über die ID) gibt es Einträge: ID(int), ProjektID(int),Bereich(int), Typ(int), Value(real)
ID: 1...y
ProjektID: 1...x
Bereich: 1...z
Typ: 1 ODER 2
Value: eine belibige Zahl

Jetzt möchte ich, über eine Abfrage über EIN Projekt, die folgene Werte erhalten:
Für jeden Bereich die Summe der Typ1 Values und die Summe der Typ2 Values. Als ein Datensatz.

Es kann vorkommen, dass es für Typ1 oder Typ2 keine Datensätze gibt, dann soll aber trotzdem die vorhandene Summe ausgegeben werden. Bei keinem Typ1 oder Typ2 für Bereich X gibt es logischerweise auch keinen Bereich X.

Code:
Daten:
 
ID  -  Projekt  -  Bereich  -  Typ  - Value
1        1          1          1      5
2        1          1          2      50
3        1          2          1      33
4        1          2          2      333
5        1          1          1      5
6        1          1          2      50
7        1          2          1      33
8        1          2          2      333     
9        1          3          1      22 
10       1          3          1      22 
 
 
Abfrage soll ergeben:
BereichID - SumOfValue_Typ1 - SumOfValueTyp2
  1            10 (5+5)      100 (50+50)
  2            66 (33+33)    666 (333+333)
  3            44 (22+22)    0 (oder besser NULL??)


Wie mache ich das?
Vielen Dank für die Hilfe!

mfg Jack
 
Werbung:

Tommi

Datenbank-Guru
Beiträge
284
Hallo Jack,

das kannst du über die Pivot-Funktion lösen.

Hier die Syntax:

SELECT
Projekt,Bereich,ISNULL([1],0)asSumOfValue_Typ1,ISNULL([2],0)asSumOfValue_Typ2
FROM
(SELECTProjekt,Bereich,Typ,ValueFROM#a)a
PIVOT
( SUM(Value) FOR Typ IN([1], [2]) ) as b
ORDER BYProjekt,Bereich


VG
 

Jack123

Neuer Benutzer
Beiträge
4
Hallo,
Habe da nochmal eine Erweiterung, an anderer Stelle aber im Prinzip gleich:

Code:
ID  -  Projekt  -  Bereich  -  Typ  - Value  -  Daten
1        1          1          1      5           2
2        1          1          2      50          1
3        1          2          1      33          3
4        1          2          2      333         5
5        1          1          1      5           5
6        1          1          2      50          5
7        1          2          1      33          5
8        1          2          2      333         5
9        1          3          1      22          4
10       1          3          1      22          5
 
 
Abfrage soll ergeben:
BereichID - SumOfValue_Typ1 - SumOfValueTyp2  -      MinOfDaten
  1            10 (5+5)      100 (50+50)                2
  2            66 (33+33)    666 (333+333)              3
  3            44 (22+22)    0 (oder besser NULL??)     4


Im Prinzip soll also die vorherige Abfrage mit dieser "neuen" verbunden werden:

Code:
SELECT Bereich, MIN(Daten) AS MinOfDaten
FROM  dbo.a
WHERE (Typ = 1) AND (Projekt = 1)
GROUP BY Bereich

Ich möchte also als ausgabe den jeweils minimalen Wert der Spalte "Daten" zu jedem Bereich erhalten. Weiterhin ist es egal was im Datensatz Typ=2 in diesem Feld steht. Es zählen nur die Werte in den Typ=1 Datensätzen.

Danke nochmals für Eure Mühe!

mfg Jack
 
Werbung:

Tommi

Datenbank-Guru
Beiträge
284
Hallo Jack,

hier habe ich noch eine andere Syntax (die ich persönlich im Übrigen bevorzuge), die dich zum gleichen Ergebnis führt aber zusätzlich leichter erweiterbar (und verständlicher) ist
(auch mit der von Dir beschriebenen Erweiterung versehen):
SELECTProjekt,Bereich,
ISNULL(SUM(CASEWHENTyp=1 THENValueELSENULLEND),0)asSumOfValue_Typ1,
ISNULL(SUM(CASEWHENTyp=2 THENValueELSENULLEND),0)asSumOfValue_Typ2,
MIN(Daten)asMinOfDaten
FROM[TABELLE]
GROUPBYProjekt,Bereich
Viele Grüße,
Tommi
 
Oben