2016-12-05 11 views
0

Dies ist hoffentlich ziemlich einfach. Was ich suche, ist Gesamtverkäufe nach Abteilung für jeden Tag. Es gibt mehrere Abteilungen in mehreren Geschäften mit mehreren Daten.SQL-Abfrage für den Gesamtumsatz von jeder Abteilung für jeden Tag funktioniert nicht

Was ich bekomme ist eine Zeile für jeden Verkauf in der Abteilung. Ich denke, das liegt daran, dass SQL das tut, was es gesagt hat, und mir wegen der Transaktionszeit eine Zeile für jeden Verkauf zeigt. Ich versuche jeden Tag zu gruppieren und ich bin mir sicher, dass mir etwas Einfaches fehlt.

Hier eine Beispieltabelle

SalesTotal | Department | StoreNumber | SalesDateTime 
---------- | ---------- | ----------- | ------------------- 
3.96   Books  5000   2016-10-01 10:01:11  
0.99   Books  5000   2016-10-01 10:03:40  
3.98   Books  5000   2016-10-01 10:19:45  
0.99   Books  5000   2016-10-01 10:27:58  
2.98   Women  5000   2016-10-01 11:50:11  
1.49   Women  5000   2016-10-01 11:58:35  
2.97   Women  5000   2016-10-01 12:05:11  
4.15   Women  5000   2016-10-01 12:06:20  
3.98   Mens   5000   2016-10-01 12:55:03  
4.98   Mens   5000   2016-10-01 13:02:13  
4.47   Mens   5000   2016-10-01 13:19:40  

Was ich erwarte, ist diese

SalesTotal | Department | StoreNumber | SalesDateTime 
---------- | ---------- | ----------- | ------------------- 
9.93   Books  5000   2016-10-01 
11.58  Womens  5000   2016-10-01 
13.43  Mens   5000   2016-10-01 

ich dies denke nur eine Summe ist und Abfrage Gruppierung, aber ich kann es nicht kommen bekommen auf diese Weise. Ich nehme Daten aus einer Tabelle und lege sie in eine temporäre Tabelle, weil ich andere Daten (wie den Geschäftsnamen usw.) von anderen Tabellen habe, aber die obigen Werte sind korrekt. Im Folgenden finden Sie die Abfrage (ja, ich habe ein paar Variablen, sondern nur für die Auswahl der Daten im Frontend) ...

SELECT SUM(Price) AS SalesTotal 
    , Department 
    , StoreNumber 
    , SaleDateTime 
INTO #tblSales 
FROM LineItem 
WHERE SaleDateTime BETWEEN @StartDate AND @EndDate 
GROUP BY Department, T.StoreNumber, SaleDateTime 

SELECT * 
FROM #tblSales 

Vielen Dank für einen Blick, wenn mehr Informationen erforderlich sind, lassen Sie es mich wissen. Wie bereits erwähnt, kann ich nicht herausfinden, was mir an der Gruppierung fehlt. Ich schätze jede Hilfe, die ich bekommen kann.

Antwort

1

Sie gruppieren nach Datum und Zeit, was bedeutet, wenn sie nicht identisch sind, werden sie nicht gruppiert werden. Um nur nach Datum zu gruppieren, müssen Sie TransactionDateTime in Date umwandeln und stattdessen Ihre Auswahl/Gruppierung treffen.

SELECT SUM(Price) AS SalesTotal 
    , Department 
    , StoreNumber 
    , CONVERT(date, SaleDateTime) As SaleDate 
INTO #tblSales 
FROM LineItem 
WHERE SaleDateTime BETWEEN @StartDate AND @EndDate 
GROUP BY Department, T.StoreNumber, CONVERT(date, SaleDateTime) 

SELECT * 
FROM #tblSales 

Sie liefern Informationen leicht in Konflikt, sein, dass Ihre Abfrage ein Feld SaleDateTime, noch Ihre Beispieltabelle verwendet TransactionDateTime aufgerufen wird. Das obige Beispiel verwendet SaleDateTime.

+0

.... und dort auf mich starrte in das Gesicht. Ich verstehe es jetzt völlig. Danke für deinen Beitrag. Antwort markiert. Neugier Frage, wenn es Ihnen nichts ausmacht. Ich habe meine Abfrage geändert, um während der SELECT FROM-Tabelle die Summierung und Konvertierung durchzuführen. Ist die Leistung besser, wenn ich SELECT INTO für die Konvertierung und die Summen verwende? – NWHikerOR

+0

Ehrlich gesagt, habe ich keine gute Antwort für Sie. Ich würde ehrlich gesagt nur einen Vergleich der beiden machen und sehen, was Ihnen schnellere Rückkehrgeschwindigkeiten bringt! Viel Glück. – Santi

+0

Die Verwendung von SELECT INTO ergab einen Unterschied von 4 Sekunden. – NWHikerOR

1

Das ist, weil Sie gruppieren, die Zeit im Datum auch verwendend, und sie unterscheiden sich so, es sei denn, wenn Zeilen die gleiche genaue Zeit in ihnen haben, wird es nicht gruppieren, wie Sie es brauchen. Versuchen Sie stattdessen:

select sum(Price) as SalesTotal, 
    Department, 
    StoreNumber, 
    min(convert(varchar, SaleDateTime, 102)) as SaleDateTime 
from LineItem 
where SaleDateTime between @StartDate and @EndDate 
group by Department, 
    T.StoreNumber, 
    year(SaleDateTime), 
    datepart(dy, SaleDateTime) 
+0

Danke Anand für die Hilfe !! – NWHikerOR

+0

Sie sind willkommen und ein upvote würde geschätzt werden :) – Anand

0

Ihre Abfrage in Ordnung zu sein scheint, Probleme liegen mit variablen/Spaltennamen der Abfrage, wie ich das Problem mit geringfügigen Änderungen getestet, wie Sie Daten geschrieben und es funktioniert gut, Abfrage, die ich auszuführen ist als (modifiziert) nach Ihren Angaben

SELECT SUM(SalesTotal), Department, StoreNumber 
FROM Test 
Where TransactionDateTime = '2016-10-01 10:01:00.000' 
GROUP BY Department, StoreNumber, TransactionDateTime 

, wenn das Problem bleibt, wie es bitte Ihre Fehler/Ergebnisse hier einfügen

Verwandte Themen