2016-08-21 1 views
1

Ich habe eine Liste von Bestellungen, zusammen mit einer Liste von Artikeln, die in jeder Bestellung verkauft wurden.Zählen von Artikeln basierend auf dem ersten verkauften Monat

Allerdings möchte ich nur die Artikel, die im ersten Monat verkauft wurden, zählen. Dies wird in der Regel anhand des Mindestdatums ermittelt, an dem ein Artikel erscheint.

Nachfolgend finden Sie einige Beispielcode

DECLARE @sales table(
    itemnumber int, 
    saledate date, 
    ordid int) 

    INSERT INTO @sales VALUES(43029, '2011-26-03', 1) 
    INSERT INTO @sales VALUES(43029, '2011-26-03', 2) 
    INSERT INTO @sales VALUES(43029, '2011-26-03', 3) 
    INSERT INTO @sales VALUES(43029, '2011-26-03', 4) 
    INSERT INTO @sales VALUES(43029, '2011-26-03', 4) 
    INSERT INTO @sales VALUES(43029, '2011-26-04', 4) 
    INSERT INTO @sales VALUES(43029, '2011-26-04', 5) 
    INSERT INTO @sales VALUES(43029, '2011-26-04', 5) 
    INSERT INTO @sales VALUES(43030, '2011-26-04', 5) 
    INSERT INTO @sales VALUES(43030, '2011-26-04', 6) 
    INSERT INTO @sales VALUES(43030, '2011-26-04', 7) 
    INSERT INTO @sales VALUES(43030, '2011-26-04', 8) 
    INSERT INTO @sales VALUES(43030, '2011-26-04', 8) 
    INSERT INTO @sales VALUES(43030, '2011-26-04', 8) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 9) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 9) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 9) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 9) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 9) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 9) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 19) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 19) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 25) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 25) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 25) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 27) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 27) 
    INSERT INTO @sales VALUES(43030, '2011-26-05', 27) 
    INSERT INTO @sales VALUES(43050, '2011-26-05', 28) 
    INSERT INTO @sales VALUES(43050, '2011-26-05', 29) 
    INSERT INTO @sales VALUES(43050, '2011-26-05', 39) 
    INSERT INTO @sales VALUES(43050, '2011-26-05', 30) 
    INSERT INTO @sales VALUES(43050, '2011-26-06', 31) 
    INSERT INTO @sales VALUES(43050, '2011-26-06', 31) 
    INSERT INTO @sales VALUES(43090, '2011-26-07', 61) 
    INSERT INTO @sales VALUES(43090, '2011-26-07', 61) 
    INSERT INTO @sales VALUES(43090, '2011-26-07', 61) 
    INSERT INTO @sales VALUES(43090, '2011-26-07', 61) 
    INSERT INTO @sales VALUES(43090, '2011-26-08', 71) 
    INSERT INTO @sales VALUES(43090, '2011-26-08', 71) 

Die Ausgabe wie die folgende Tabelle aussehen würde, nur Aufträge von der ersten Monate im Wert von Umsatz für das Element

ItemNo | MonthYear | Count 
------------------------- 
43029 | 03-2011 | 5 
43030 | 04-2011 | 6 
43050 | 05-2011 | 4 
43090 | 07-2011 | 4 

Ich bin in der Lage zu zählen bekommen Die Gesamtzahl zählt nach ITEM NO zusammen mit dem ersten Datum und zählt die Anzahl der verkauften Artikel am Tag selbst, kann aber nicht alle Artikel für den Monat/das Jahr insgesamt zählen, da der Artikel über mehrere Bestellungen verkauft werden kann/Daten im selben Monat

Jede Hilfe wäre großartig!

+1

Können Sie einfügen Ihre erwartete Ausgabe mit einigen Beispielen – TheGameiswar

+0

Könnten Sie bitte den Link überprüfen und versuchen, die Frage zu verbessern: https: //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a- public-forum/ – TheGameiswar

+0

Danke! Gerade überarbeitet - schätze es – Danimov82

Antwort

1

diese

DECLARE @sales table(
itemnumber int, 
saledate date, 
saleid int) 

INSERT INTO @sales VALUES(1234, '2015-01-10', 1) 
INSERT INTO @sales VALUES(1234, '2015-01-11', 2) 
INSERT INTO @sales VALUES(1234, '2015-01-12', 3) 
INSERT INTO @sales VALUES(1234, '2015-01-13', 4) 
INSERT INTO @sales VALUES(1234, '2015-01-14', 5) 
INSERT INTO @sales VALUES(1234, '2015-02-10', 6) 
INSERT INTO @sales VALUES(1234, '2015-02-11', 7) 
INSERT INTO @sales VALUES(1234, '2015-03-10', 8) 
INSERT INTO @sales VALUES(1234, '2015-04-10', 9) 
INSERT INTO @sales VALUES(1234, '2015-04-16', 10) 
INSERT INTO @sales VALUES(1256, '2015-02-10', 11) 
INSERT INTO @sales VALUES(1256, '2015-02-11', 12) 
INSERT INTO @sales VALUES(1256, '2015-02-12', 13) 
INSERT INTO @sales VALUES(1256, '2015-02-13', 14) 
INSERT INTO @sales VALUES(1256, '2015-02-14', 15) 
INSERT INTO @sales VALUES(1256, '2015-03-10', 16) 
INSERT INTO @sales VALUES(1256, '2015-03-11', 17) 
INSERT INTO @sales VALUES(1256, '2015-04-10', 18) 
INSERT INTO @sales VALUES(1256, '2015-04-10', 19) 
INSERT INTO @sales VALUES(1256, '2015-04-16', 20) 
INSERT INTO @sales VALUES(1259, '2015-02-10', 21) 
INSERT INTO @sales VALUES(1259, '2015-02-11', 22) 
INSERT INTO @sales VALUES(1259, '2015-03-12', 23) 
INSERT INTO @sales VALUES(1259, '2015-03-13', 24) 
INSERT INTO @sales VALUES(1259, '2015-03-14', 25) 
INSERT INTO @sales VALUES(1259, '2015-03-10', 26) 
INSERT INTO @sales VALUES(1259, '2015-03-11', 27) 
INSERT INTO @sales VALUES(1259, '2015-04-10', 28) 
INSERT INTO @sales VALUES(1259, '2015-04-10', 29) 
INSERT INTO @sales VALUES(1259, '2015-04-16', 30) 
INSERT INTO @sales VALUES(1255, '2015-03-10', 31) 
INSERT INTO @sales VALUES(1255, '2015-03-11', 32) 
INSERT INTO @sales VALUES(1255, '2015-03-12', 33) 
INSERT INTO @sales VALUES(1255, '2015-03-13', 34) 
INSERT INTO @sales VALUES(1255, '2015-03-14', 35) 
INSERT INTO @sales VALUES(1255, '2015-03-10', 36) 
INSERT INTO @sales VALUES(1255, '2015-03-11', 37) 
INSERT INTO @sales VALUES(1255, '2015-03-10', 38) 
INSERT INTO @sales VALUES(1255, '2015-04-10', 39) 
INSERT INTO @sales VALUES(1255, '2015-04-16', 40) 

SELECT s.itemnumber, 
right(convert(varchar, fd.firstsaledate, 103), 7) AS firstsale, 
COUNT(*) as firstmonthsales FROM @sales s 
INNER JOIN 
(SELECT itemnumber, Min(saledate) as firstsaledate FROM @sales 
GROUP BY itemnumber) as fd 
ON MONTH(s.saledate) = MONTH(fd.firstsaledate) 
AND YEAR(s.saledate) = YEAR(fd.firstsaledate) 
AND s.itemnumber = fd.itemnumber 
GROUP BY s.itemnumber, fd.firstsaledate 

Ergebnisse

itemnumber firstsale firstmonthsales 
1234  01/2015  5 
1255  03/2015  8 
1256  02/2015  5 
1259  02/2015  2 
+0

Sieht so aus, als müsste ich auch nach Channel sortieren - als neue Frage gepostet, wenn du mal gucken könntest! http://stackoverflow.com/questions/39068325/counting-by-item-channel-by-first-month-sold – Danimov82

0

Mit Beispieldaten von Jonathan Willcock Versuchen ..

Da Sie auf 2012 sind, können Sie Fensterfunktionen als auch wie unten verwenden ..

;With cte 
as 
(select 
itemnumber,saledate,dense_rank() over (partition by itemnumber order by cast(month(saledate) as varchar(2))+'/'+cast(year(saledate) as varchar(4))) as rownum 
from 
@sales 
) 
select itemnumber,cast(month(saledate) as varchar(2))+'/'+cast(year(saledate) as varchar(4)),sum(rownum) as salescount 

from cte 
where rownum=1 
group by 
itemnumber,cast(month(saledate) as varchar(2))+'/'+cast(year(saledate) as varchar(4)) 
+0

Eigentlich mit 2016, aber ich nehme an, das selbe gilt - reparierte das Tag dort – Danimov82

+0

@ Danimov82: ja das ist wahr – TheGameiswar

+0

Das ist hilfreich, danke - sieht so aus, als müsste ich auch nach Kanal sortieren, also als neue Frage veröffentlicht, wenn du einen Blick darauf werfen kannst - http://stackoverflow.com/questions/39068325/counting-by-item-channel- nach dem ersten Monat verkauft – Danimov82

Verwandte Themen