SQL- 月份的周数而不是年份 & 为什么查询在一个月中返回 6 周

Zee*_*pro 1 sql t-sql

可能的重复:
TSQL 计算月份的周数

这是我的 SQL 查询

 SELECT DATEPART(MONTH,PaymentDate) AS 'Month',
       DATEPART(WEEK,PaymentDate) AS 'Week #',
       SUM(COALESCE(Amount,0)) AS 'Amount',
       SUM(COALESCE(Balance,0)) AS 'Balance'
FROM Payment
WHERE     (MONTH(PaymentDate) = MONTH('2012-09-01'))
GROUP BY DATEPART(MONTH,PaymentDate),
DATEPART(WEEK,PaymentDate)
GO
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我试图以每周的方式获得一个月的总付款。

现在我有两个问题

1)如您所见,它显示的是一年中的第 # 周而不是那个月。

2) 还显示 6 周组而不是 4 周。

我该如何解决。

谢谢。

Sco*_*rle 5

日期很难,因为日历是不合逻辑的。

我在这里的评论中假设是公历。

如果您按“每月的周数”分组,您需要首先定义您希望看到的内容。如果您希望每个月的“第一周”从该月的第一天开始,那么除了二月(四分之三)之外,每个月都有五个星期。

如果您希望“一周”从某一天开始,那么每个月都有五到六周,偶尔的 2 月除外。

假设您希望本月的第一个“周”是第 1-7 天,第二个是第 8-14 天,依此类推,那么您最好的选择是使用类似

CASE
    WHEN DATEPART(DAY, PaymentDate) BETWEEN 1 AND 7 THEN 1
    WHEN DATEPART(DAY, PaymentDate) BETWEEN 8 AND 14 THEN 2
    WHEN DATEPART(DAY, PaymentDate) BETWEEN 15 AND 21 THEN 3
    WHEN DATEPART(DAY, PaymentDate) BETWEEN 22 AND 28 THEN 4
    ELSE 5
END
Run Code Online (Sandbox Code Playgroud)

(例如)。

然而,最重要的事情是准确定义您希望它在每种情况下的行为方式。然后查询可以遵循该查询。