SQL异常聚合,寻求帮助



我有以下场景

tbody> <<tr>αααα
System Subsystem &;文件名 文件加载开始时间 文件加载结束时间
αA1 transactiontxt2022-06-19 08:00:002022-06-19 08:00:02
A2 userscsv2022-06-19 08:00:022022-06-19 08:00:05
A2 employeescsv2022-06-19 08:00:052022-06-19 08:00:08
A1 managerscsv2022-06-19 08:00:002022-06-19 08:00:02
A3 customerscsv2022-06-19 08:00:012022-06-19 08:00:04
γA1 transactiontxt2022-06-19 10:00:482022-06-19 10:00:53
γA2 userscsv2022-06-19 10:00:532022-06-19 10:00:54
γA2 employeescsv2022-06-19 10:00:272022-06-19 10:00:30
γA1 managerscsv2022-06-19 10:00:112022-06-19 10:00:17
γA3 customerscsv2022-06-19 10:00:132022-06-19 10:00:14

聚合函数不能在另一个聚合函数SUM(... MIN(...), MAX(...))中使用。为了简化查询,您需要将执行的操作拆分为:

  • 检测数据的唯一行
  • 提取子系统"源自">子系统&文件名,
  • 子系统上的旋转
  • 对您的相关字段进行聚合
WITH cte AS (
SELECT DISTINCT [System],
LEFT([Subsystem & Filename], 
CHARINDEX(' ', [Subsystem & Filename])-1) AS [Subsystem],
[File Load Start Time]                         AS [StartTime],
[File Load End Time]                           AS [EndTime]
FROM tab
)   
SELECT [System],
MIN([StartTime])        AS [Overall System Load Start Time],
MAX([EndTime])          AS [Overall System Load End Time],
SUM(CASE WHEN [Subsystem]='A1' 
THEN DATEDIFF(s, [StartTime], [EndTime]) END) AS [A1 Time Taken],
SUM(CASE WHEN [Subsystem]='A2' 
THEN DATEDIFF(s, [StartTime], [EndTime]) END) AS [A2 Time Taken],
SUM(CASE WHEN [Subsystem]='A3' 
THEN DATEDIFF(s, [StartTime], [EndTime]) END) AS [A3 Time Taken]
FROM cte
GROUP BY [System]

点击这里查看演示。

相关内容

最新更新