ich einen Kunden Tisch haben und eine Orderdetail-Tabelle die Kunden-ID ist ein foriegn Schlüssel in der Tabelle Orderdetail (Ich bin hier vereinfacht)Hilfe für SQL - GroupBy und mehrere Aggregate
Die Orderdetail-Tabelle enthält die folgenden Spalten OrderId ItemId CustomerId Größe
Die Spalte Größe kann auf einem der folgenden Werte annehmen 1. vl 2. md 3. sm
So könnte die Tabelle Orderdetail die folgenden Datensätze haben (ich habe Komma die Spalten getrennt)
OrderId ItemId CustomerId Größe
1,1,30,lr
1,1,30,md
1,1,30,sm
2,1,30,lr
2,1,30,md
3,1,30,lr
3,1,30,sm
4,1,30,lr
5,1,30,md
6,2,30,sm
7,3,30,md
8,3,30,lr
Was Ich mag würde, ist eine wirklich effiziente Abfrage (es Millionen von Datensätzen ist in den Bestelldaten-Tabellen), die die folgende Ausgabe für eine gegebene customerId (30 in diesem Fall)
ItemId SizeLr SizeMd SizeSm
1 4 3 2
2 0 0 1
3 1 1 0
die Abfrage ich verwende Verwendungen 3 Gruppe von Abfragen (jeweils eine für „lr“, „md“ hat und "sm") und als Ergebnis scannt es der Tisch 3 mal.
Ich bin auf der Suche nach einer Lösung, die den Tisch nur Onces scannt. Ich denke, dass die Lösung die neue Grouping-Set-Funktion in MSSQL 2008 verwendet. Aber in beiden Fällen, eine Lösung mit einem Scan, wenn ich hoffe, dass jemand mir helfen kann.
EDIT
Die tatsächliche Leistung braucht andere Felder aus der Kundentabelle und die Tabelle Bestelldetails als auch hat. Diese anderen Felder sind nicht von den Aggregaten abhängig.
Zum Beispiel
ItemName ItemId SizeLr SizeMd SizeSm
A 1 4 3 2
B 2 0 0 1
C 3 1 1 0
Totals 5 4 4
Es wäre schön, wenn ich die Summen für jede der Größe Spalten bekommen könnte auch
sind die anderen Spalten aus der Tabelle mit den Auftragsdetails abhängig von Größe. Wenn nicht, bitte spezifizieren Sie, wie sie angezeigt werden. –
Ich habe die Frage aktualisiert, um diese Informationen zu enthalten. Es tut mir leid, dass ich beim ersten Mal nicht klarer geworden bin. –