【发布时间】:2020-08-23 02:40:15
【问题描述】:
我正在尝试根据与 CASE WHEN 匹配的值聚合记录的总和
我能够汇总总和,但我不知道如何根据 description 值对记录进行分组。
SQL 查询:
SELECT
T1.Company, T1.DueDate,
SUM(T1.Amount) AS TotalAmount,
DATEDIFF( day, CONVERT(DATETIME, CAST(T1.DueDate AS VARCHAR(8)), 112), DATEADD( day, - 1, CONVERT(DATETIME, CAST(T3.FromDate AS VARCHAR(8)), 112) ) ) AS Age,
CASE
WHEN
DATEDIFF( day, CONVERT(DATETIME, CAST(T1.DueDate AS VARCHAR(8)), 112), DATEADD( day, - 1, CONVERT(DATETIME, CAST(T3.FromDate AS VARCHAR(8)), 112) ) ) <= 0
THEN
'Current'
WHEN
DATEDIFF( day, CONVERT(DATETIME, CAST(T1.DueDate AS VARCHAR(8)), 112), DATEADD( day, - 1, CONVERT(DATETIME, CAST(T3.FromDate AS VARCHAR(8)), 112) ) ) > 0
AND DATEDIFF( day, CONVERT(DATETIME, CAST(T1.DueDate AS VARCHAR(8)), 112), DATEADD( day, - 1, CONVERT(DATETIME, CAST(T3.FromDate AS VARCHAR(8)), 112) ) ) <= 30
THEN
'Late'
END AS Description
FROM
Table1 T1
LEFT JOIN
Table2 T2
ON T1.Company = T2.Company
AND T1.YR = T2.YR
INNER JOIN
Table3 T3
ON T1.Company = T3.Company
AND T3.YR = YEAR(CURRENT_DATE)
GROUP BY T1.Company,T1.DueDate, T3.FromDate
我的查询返回以下内容。
Company | DueDate | TotalAmount | Age | Description
------------+----------------+-------------+------+------------
123 | 20200423 | 150 | 7 | Late
123 | 20200604 | 18000 | -35 | Current
123 | 20200515 | 500 | -15 | Current
但是,我真正想要完成的是聚合记录,如果它们具有相同的Description 值。
所以,正确的结果应该是:
Company | TotalAmount |Description |
------------+--------------+------------+
123 | 150 | Late
123 | 18500 | Current
第 2 行和第 3 行属于“当前”。因此,它应该合并 2 行并添加 18000 + 500 = 18500。DueDate 和 Age 列仅供参考。最重要的字段是TotalAmount 和Description
我尝试按CASE-WHEN 中使用的别名Description 进行分组,但没有成功。
如果有任何帮助,我将不胜感激。
谢谢!
【问题讨论】:
-
这个查询必须在 MySQL 中运行,因为它应该引发几个错误!请标记您的 DBMS。
-
@Parfait:它看起来像 SQL Server.. 除了使用
current_date。 -
table2上的left join有什么意义,而查询中的任何地方似乎都没有使用此表? -
@GMB,我也是这么认为的,但是 SQL Server 会引发 description 的错误,并且可能会引发 Age 错误(如果不是由 DueDate 和 FromDate) 不在
GROUP BY子句中。 OP 可能在发布时删除了太多代码。 -
@jordan,请标记您的 RDBMS 并注意其版本(MySQL 8+ 支持 CTE)。并重新检查您的
GROUP BY子句。你的prior question 表示mysql。
标签: sql group-by aggregate-functions case-when