sql - 在 sql server 中按特定月份的周分组

标签 sql sql-server

我有一个包含几列的表格 [ShipAmt][Cdate]、....

我想按特定月份的周对列求和并显示出来。

被认为是从 1 月开始到月末的那一周。

如果一周内没有ProductOrders,我想将它们的总和显示为0.00

示例

Week 1 ---> 2016/03/01 - 2016/03/07

Week 2 ---> 2016/03/08 - 2016/03/14

Week 3 ---> 2016/03/15 - 2016/03/21

Week 4 ---> 2016/03/22 - 2016/03/28

Week 5 ---> 2016/03/29 - 2016/03/31

表格

create table ProductOrders
( 
   [ID] [int] IDENTITY(1,1) NOT NULL,
   [ShipAmt] float not null,
   [Total] float not null,
   [Cdate] datetime not null
)

值(value)观

insert into ProductOrders ([ShipAmt], [Total], [Cdate]) 
values (26.99 , 40.00, '2016-03-04 20:26:54.000');
insert into ProductOrders ([ShipAmt], [Total], [Cdate]) 
values (45.00 , 70.88, '2016-03-04 20:28:41.000');
insert into ProductOrders ([ShipAmt], [Total], [Cdate]) 
values (75.00 ,125.00, '2016-03-05 05:39:03.000');
insert into ProductOrders ([ShipAmt], [Total], [Cdate]) 
values (49.00 , 71.99, '2016-02-26 11:21:02.000');

现在我想对 3rd 月的所有列求和,我试过了。

Select 
Sum([ShipAmt]) [ShipAmt],
Sum([Total]) [Total]
from
(
    SELECT 
    [ShipAmt],
    [Total],
    [Cdate],
    DATEDIFF(week, '2016-03-01', '2016-03-31') AS WeekNumber
    FROM ProductOrders
)
as t1
GROUP BY
WeekNumber

输出是

ShipAmt Total
195.99  307.87

期望的输出

ShipAmt Total
146.99  235.88
0.00     0.00
0.00     0.00
0.00     0.00

最佳答案

试试这个

DECLARE @d1 DATETIME, @d2 DATETIME
SELECT @d1 = '2016-03-01' ,@d2= '2016-03-31'
;WITH dates ( [date] )
AS
(
SELECT @d1
UNION all
SELECT dateadd(d,1,date)
FROM dates
where date < @d2
)
select  DISTINCT DATEPART(week,[date]) AS WeekNumber
       , ISNULL(M.TotalShipAmt,0)
       ,ISNULL(M.Total,0) 
from dates 
LEFT OUTER JOIN(
SELECT 
SUM([ShipAmt]) AS TotalShipAmt,
SUM([Total])AS Total,
DATEPART(week,[Cdate]) AS WEEKNUMBER
FROM ProductOrders ProductOrders
GROUP BY DATEPART(week,[Cdate])
)AS M  ON M.WEEKNUMBER=DATEPART(week,[date]) 

关于sql - 在 sql server 中按特定月份的周分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35939530/

相关文章:

php - Mysql查询SUM动态金额

SQL 查询对表 X 的所有字段动态 COUNT(FIELD)

sql-server - 用户和地址应该位于不同的表中吗?

java - 在 Android 中调用游标时收到 NullPointerException

php - Mysql - Where IN 子句未正确选择数据

sql-server - 有没有办法在SSDT数据库项目中引用CDC对象?

sql-server - SQL Server smalldatetime 与 datetime2

sql - 当值存在于具有不同列数的 5 个表之一中时选择行集

sql - Postgres COPY 到 CSV

mysql - 如何在 SQL 查询中选择时间戳的一部分