2016-08-21 2 views
1

У меня есть список заказов, а также список предметов, которые были проданы в каждом заказе.Подсчет товаров на основе первого месяца Продано

Тем не менее, я хочу только подсчитать предметы, проданные в течение первого месяца, когда товары были проданы. Обычно это можно выяснить, посмотрев минимальную дату появления элемента.

Ниже приведен пример кода

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) 

Выходной сигнал будет выглядеть ниже в таблице, только подсчет заказов от первых месяцев на сумму продаж для данного пункта

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

я могу получить общее количество баллов по номеру ПУНКТА вместе с указанием первой даты ордера и подсчет количества предметов, проданных в день, но я не могу считать все предметы за месяц/год в совокупности, так как этот предмет может быть продан по нескольким заказам/даты в том же месяце

Любая помощь будет замечательной!

+1

Не могли бы вы вставить ваш ожидаемый результат с некоторыми примерами – TheGameiswar

+0

Не могли бы вы проверить ссылку и попытаться улучшить вопрос: https: //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a- public-forum/ – TheGameiswar

+0

Спасибо! Только что пересмотрено - оцените его – Danimov82

ответ

1

Попробуйте

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 

Результаты

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

Похоже, мне также нужно сортировать по каналу - как новый вопрос, если вы можете взглянуть! http://stackoverflow.com/questions/39068325/counting-by-item-channel-by-first-month-sold – Danimov82

0

Используя данные примера Джонатана Willcock ..

Поскольку вы находитесь на 2012, вы можете использовать окно функции, а также, как показано ниже ..

;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

Фактически с использованием 2016, но я предполагаю, что то же самое применяется - исправлен тег – Danimov82

+0

@ Danimov82: да, это правда – TheGameiswar

+0

Это полезно, спасибо - похоже, мне также нужно сортировать по каналу, поэтому отправлен как новый вопрос, если вы можете взглянуть - http://stackoverflow.com/questions/39068325/counting-by-item-channel- по-первые месяцы проданные – Danimov82

Смежные вопросы