SQL 在汇总时合并行

问题描述 投票:0回答:1

我在 SQL Server Express 中有一个视图,显示每个日期汇总的总值

以下是当前视图的构建方式

SELECT        
    COALESCE(MACH, 'Total') AS MACH,
    COALESCE(DATE, '')  AS 'DATE',
    SUM(VAL) AS VAL
FROM
    myTable
GROUP BY 
    ROLLUP (MACH, DATE)
HAVING
    (MACH IS NULL) OR (DATE <> '')

在 myTable 中我有这些事件:

| MACH | DATE       | TIME     | VAL |
| 1    | 02/05/2024 | 17:35:17 | 100 |
| 1    | 02/05/2024 | 19:35:17 | 100 |
| 2    | 02/05/2024 | 21:35:17 | 100 |
| 1    | 03/05/2024 | 04:35:17 | 100 |
| 2    | 03/05/2024 | 05:35:17 | 100 |
| 1    | 03/05/2024 | 07:35:17 | 100 |

我的视图是这样的:

| MACH  | DATE       | VAL |
| 1     | 02/05/2024 | 200 |
| 1     | 03/05/2024 | 200 |
| 2     | 02/05/2024 | 100 |
| 2     | 03/05/2024 | 100 |
| Total |            | 600 |

我想要做的是当 myTable.TIME 在 06:00 AM 之前时将两个日期合并为一个日期。 视图应如下所示:

| MACH  | DATE       | VAL |
| 1     | 02/05/2024 | 300 |
| 1     | 03/05/2024 | 100 |
| 2     | 02/05/2024 | 200 |
| Total |            | 600 |

可能吗? 我尝试在 ROLLUP 中使用 CASE WHEN 但没有运气,我不知道该怎么做

sql sql-server group-by rollup
1个回答
0
投票

我认为,最好有一个内部选择来连接日期和时间并将其转换为日期时间, 然后从结果中减去 6 小时, 这意味着您计算的一天是从早上 6 点到第二天早上 6 点。 希望可以解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.