首页 > 解决方案 > 按表包含日期时间列时分组

问题描述

我有下表:

Id | OrderNO | QTY | Station |  DateSt             |  DateEd             | Status |  CreatedDt
1  |   200   |  30 |   ABC   |  10/19/2019 1:00pm  |  NULL               |  NULL  |  10/19/2019 1:00pm
2  |   200   |  30 |   ABC   |  NULL               |  NULL               |  NULL  |  10/19/2019 2:00pm
3  |   200   |  0  |   ABC   |  NULL               |  10/19/2019 3:00pm  |  End   |  10/19/2019 3:00pm

我想要做的是获取一个查询以显示 Qty 列的总和以及仅具有初始日期和结束日期的行。像这样的东西:

OrderNO |  QTY  | Station |  DateSt            | DateEd            |  Status   |  CreatedDt
   200  |   60  |   ABC   |  10/19/2019 1:00pm | NULL              |   NULL    |  10/19/2019 1:00pm
   200  |   0   |   ABC   |  NULL              | 10/19/2019 3:00pm |   End     |  10/19/2019 3:00pm

目前我有查询来显示我期望的结果,但我没有使用 Dates 列,如果我添加这些列,查询显示的行数比我想要的多。这是我的查询:

SELECT OrderNO, SUM(QTY), Station, Status
FROM TableName WHERE Status IS NULL
GROUP BY OrderNO, Station, Status
UNION ALL 
SELECT OrderNO, QTY, Station, Status
FROM TableName WHERE Status='End'
GROUP BY OrderNO, Station, Status

钯。包含 Status='End' 的行将始终具有 Qty = 0 和 DateEd 日期时间。在我的表中插入的第一行必须包含 DateSt 日期时间。

我可以做些什么来添加那些日期时间列以保持我期望的最终结果?

标签: sqlsql-servertsql

解决方案


您可以在 select 子句中的日期列上使用maxor函数吗?min像这样:

select OrderNO, SUM(QTY), Station, Status, max(DateSt)

而且您不必将其放在 group by 子句中。


推荐阅读