2016-06-21 12 views
0

Ich habe einige Probleme .... Wie bekomme ich den folgenden Code behoben, um die Tabelle unten als eine Summe von Kunden zurückgeben? Ich möchte insgesamt Kundenmengen nach Kunden und dann eine Top-10-Liste. Also sollten alle Yellow Rose zusammen addiert und dann als ein Eintrag gezählt werden, anstatt dass alle ihre Sendungen einzeln angezeigt werden.Top 10 des Kunden - Gesamt

select top 10 T1.Quantity, T1.CustName 
from 
(
select 
    SUM(Tkscale.Qty)Quantity, 
     Slcust.Name CustName 

from Tkscale with (nolock) 
     left outer join Slcust with (nolock) on Tkscale.CustomerID = Slcust.CustomerID 

group by Tkscale.CustomerID, Tkscale.Qty, Slcust.Name 
) T1 
order by T1.CustName desc, T1.Quantity desc 

enter image description here

+0

2008 R2 @CodeDifferent – Molly

+1

von tkscale.qty auf der inneren Abfrage nicht Do Gruppe. Es wird zusammengefasst, so dass es nicht in der Gruppe sein sollte. – xQbert

+0

Sie können sich diesen Artikel ansehen, bevor Sie fortfahren, Ihre Datenbank mit Nolock-Hinweisen zu belegen. http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –

Antwort

3

Versuch in der Gruppierung 'Tkscale.Qty'

+0

Danke !! Nun zu meinem nächsten Schritt ... Ich werde wahrscheinlich zurück sein. – Molly

1

Entfernen Sie die Tkscale.Qty aus der GROUP BY Klausel in Ihrer inneren Abfrage zu entfernen. Ich denke auch, dass Sie 10 größten Kunden von Quantität wünschen, nicht durch ihre Namen:

select top 10 T1.Quantity, T1.CustName 
from 
(
select 
    SUM(Tkscale.Qty)Quantity, 
     Slcust.Name CustName 

from Tkscale with (nolock) 
     left outer join Slcust with (nolock) on Tkscale.CustomerID = Slcust.CustomerID 

group by Slcust.Name 
) T1 
order by T1.Quantity desc, T1.CustName desc 
     ^change the sequence of the ORDER BY clause 
+0

Sie sollten nach indizierter ID gruppieren, nicht nach einem String-Wert (der nicht indexiert werden sollte): 'group by Tkscale.CustomerID' – marlan

Verwandte Themen