销售的单个商品按周统计
Posted
技术标签:
【中文标题】销售的单个商品按周统计【英文标题】:Sales counts by week for individual items sold 【发布时间】:2014-12-31 11:07:12 【问题描述】:我有一个大型 SQL 表,其中包含以下字段以及其他字段
Item, Date Sold,
1 Day Coaster 2014-11-10,
3 Day Coaster 2014-02-16,
1 Day Coaster 2014-11-11,
AC-Zip 2014-12-21,
5 Day Package 2014-05-15,
1 Day Coaster 2014-11-07,
作为 SQL 新手,我的专业知识只能单独选择项目并从单个结果中获取计数,然后从受影响的行中将它们输入到 Excel 中。
我需要能够提取每周销售的单个商品的数量,并将每周的数量列出到 Excel 电子表格中;
Week Item Count
2014-11-07-2014-11-13 1 Day Coaster 3
【问题讨论】:
欢迎来到 Stack Overflow!请通过添加适当的标记(Oracle、SQL Server、mysql 等)来指定您要定位的 RDBMS。可能有一些答案利用了不受普遍支持的语言或产品功能。此外,通过使用特定的 RDBMS 对其进行标记,您的问题可能会受到更适合回答的人的关注。 【参考方案1】:您需要使用 Group BY 语句。
这是一个示例 SQLFiddle,它可能会帮助您入门:SQL Fiddle
【讨论】:
【参考方案2】:你可以用这个:
SELECT A.Item,A.DateRange,COUNT(A.Item)
FROM (
SELECT Item,
(SELECT DISTINCT
CASE
WHEN YEAR(DATEADD(DAY, 1-DATEPART(WEEKDAY, Min(Date_Sold)), Min(Date_Sold))) < YEAR(Min(Date_Sold))
THEN
CAST(DATEADD(YEAR, DATEDIFF(YEAR, 0,DATEADD(YEAR, 0 ,GETDATE())), 0) AS Varchar(50))
+ ' TO ' + Cast(DATEADD(dd, 7-(DATEPART(dw, Min(Date_Sold))), Min(Date_Sold)) AS Varchar(50))
ELSE
Cast(DATEADD(DAY, 1-DATEPART(WEEKDAY, Min(Date_Sold)), Min(Date_Sold)) AS Varchar(50))
+ ' TO ' + Cast(DATEADD(dd, 7-(DATEPART(dw, Min(Date_Sold))), Min(Date_Sold)) AS Varchar(50))
END AS DateRange
FROM <YOUR_TABLE> B
WHERE A.Date_Sold=B.Date_Sold
AND A.Item=B.Item
group by Item
) AS DateRange
FROM <YOUR_TABLE> A
) A
GROUP BY Item,DateRange;
如果这不是您要查看的内容,请告诉我。
【讨论】:
【参考方案3】:使用这个。 Fiddler Demo
输出:
查询
CREATE TABLE weekdays
(
datevalue datetime NOT NULL
, Item VARCHAR(MAX)
);
INSERT INTO weekdays (datevalue, item) VALUES
('2014-11-10', '1 Day Coaster'),
('2014-02-16', '2 Day Coaster'),
('2014-11-11', '1 Day Coaster'),
('2014-12-21', 'AC-Zip'),
('2014-05-15', '5 Day Package'),
('2014-11-07', '1 Day Coaster');
CREATE FUNCTION [dbo].[ufn_GetFirstDayOfWeek]
( @pInputDate DATETIME )
RETURNS DATETIME
BEGIN
SET @pInputDate = CONVERT(VARCHAR(10), @pInputDate, 111)
RETURN DATEADD(DD, 1 - DATEPART(DW, @pInputDate),
@pInputDate)
END
GO
SET DATEFIRST 5
SELECT CONVERT(VARCHAR(10), A.Date, 101) + ' - ' +
CONVERT(VARCHAR(10), DATEADD(d, 6, A.Date), 101) AS Week,
A.Item,
COUNT(A.Item) AS COUNT FROM
(SELECT [dbo].ufn_GetFirstDayOfWeek(datevalue) AS Date, item FROM weekdays) AS A
GROUP BY A.Date, A.Item
【讨论】:
以上是关于销售的单个商品按周统计的主要内容,如果未能解决你的问题,请参考以下文章