销售的单个商品按周统计

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

【讨论】:

以上是关于销售的单个商品按周统计的主要内容,如果未能解决你的问题,请参考以下文章

用C语言来编写:商品销售统计程序

C++实现:编写商品销售统计程序。

c语言 商品管理系统

多维透视表 - 矩表实现商品销售对比统计

多维透视表 - 矩表实现商品销售对比统计

spark小案例——RDD,sparkSQL