Sql 当一个月交替时,如何按月分组
我有一个带有此模板的表: 表1Sql 当一个月交替时,如何按月分组,sql,sql-server,Sql,Sql Server,我有一个带有此模板的表: 表1 +----------+------------------+-----+ | Code | DateTime | Qty | +----------+------------------+-----+ | 1 |08/31/2019 18:30 | 100 | | 1 |09/01/2019 18:30 | 150 | | 2 |09/03/2019 18:30 | 80 | |
+----------+------------------+-----+
| Code | DateTime | Qty |
+----------+------------------+-----+
| 1 |08/31/2019 18:30 | 100 |
| 1 |09/01/2019 18:30 | 150 |
| 2 |09/03/2019 18:30 | 80 |
| 2 |09/03/2019 18:30 | 100 |
| 3 |10/15/2019 18:30 | 100 |
+----------+------------------+-----+
我需要按代码、年、月和数量进行分组
我已经为此表进行了选择:
Select
Year(DateTime) as Year,
DATENAME(Month,Datetime) as Month,
CODE,
SUM(QTY) as Qty,
From
Table_1
Group by
Code,
Year(DateTime),
DATENAME(Month,Datetime)
Order by Code
但是,当代码在两个不同的月份中有datetime时,该代码有两行:
+----+-----------+-=---+-----+
|Year| Month |Code | Qty |
+----+-----------+-----+-----+
|2019| August | 1 | 100 |
|2019| September | 1 | 150 |
|2019| September | 2 | 180 |
|2019| October | 3 | 100 |
+----+-----------+-----+-----+
如何按代码进行分组,在这种情况下,行数超过一个月,
考虑到过去一个月,比如:
+----+-----------+-=---+-----+
|Year| Month |Code | Qty |
+----+-----------+-----+-----+
|2019| September | 1 | 250 |
|2019| September | 2 | 180 |
|2019| October | 3 | 100 |
+----+-----------+-----+-----+
希望我是清楚的。只按代码分组。这里的技巧是显示正确的月份和日期。最简单的方法是通过嵌套查询:
SELECT
YEAR(Month) As Year,
DATENAME(Month, Month) AS Month,
Code,
Qty
FROM (
SELECT
CODE,
MAX([Datetime]) As Month,
SUM(QTY) as Qty
FROM
Table_1
GROUP BY
Code
) t
ORDER BY Code
如果您也只想要该月的数量,这会有点困难,但由于您仍然对所有月份求和,我们仍然可以通过简单的聚合来实现。您可以尝试下面的脚本-
SELECT YEAR(A.MX_MONTH) Yr,
DATENAME(Month,A.MX_MONTH) Mn,
A.Code Code,
SUM(A.Qty) Qty
FROM(
SELECT *,MAX(DateTime) OVER(PARTITION BY Code) MX_MONTH
FROM your_table
)A
GROUP BY A.Code,YEAR(A.MX_MONTH),DATENAME(Month,A.MX_MONTH)
输出为-
Yr Mn Code Qty
2019 September 1 250
2019 September 2 180
2019 October 3 100
您可以检查看起来您想使用MAX month,而不是按它分组。但是,当代码在两个不同的月份中有datetime时,该代码有两行,但这是有意义的。9月份代码1的总数是150,而不是250。@SeanLange,但月份不是字母,而是datenamemount,MAXYourdate是@JoelCoehoorn@我意识到这一点。看起来他们想要的是最近一个月。DATENAMEMonth,month AS month>\u<3个月,所有这些都有不同的含义,哈哈。