使用表中的多行聚合数据

时间:2017-11-22 19:14:43

标签: sql-server tsql

我正在尝试使用下表并将开始和结束时间信息聚合到一个主表中。为简单起见,我只专注于聚合发现开始和结束时间(开始时间是StartedOn,其中DispatchType = Data.Matter;导入和结束时间是FinishedOn,这里DispatchType = Data.Matter; DataExtract)。

两个dispatchtypes之间的公共ID是settingsid。

模拟乔布斯:

jobstable names #Jobs

模拟我正在尝试聚合的集合表:

collection table named #JobsTableCollection

如下所示的简单更新连接不起作用:

UPDATE jtc
SET jtc.JobsTable_DiscoveryStartTime = (SELECT jobs.StartedOn = CASE jobs.DispatchType WHEN 'Data.Matter;Import' THEN jobs.StartedOn END),
    jtc.JobsTable_DiscoveryEndTime = (SELECT jobs.FinishedOn WHERE jobs.DispatchType = 'Data.Matter;DataExtract'),
FROM #JobsTableCollection AS jtc
INNER JOIN #Jobs AS jobs ON jtc.DiscoveryGroupId = jobs.SettingsId

我正在考虑通过CTE创建更新,但是如果有人有更好的方法来尝试和汇总这些信息,我很好奇。

1 个答案:

答案 0 :(得分:0)

我认为您可以使用以下变体

UPDATE jtc
SET jtc.JobsTable_DiscoveryStartTime = ISNULL(jobs1.StartedOn,'19000101'),
    jtc.JobsTable_DiscoveryEndTime = ISNULL(jobs2.FinishedOn,'19000101')
FROM #JobsTableCollection AS jtc
LEFT JOIN #Jobs AS jobs1 ON jtc.DiscoveryGroupId = jobs1.SettingsId AND jobs1.DispatchType = 'Data.Matter;Import'
LEFT JOIN #Jobs AS jobs2 ON jtc.DiscoveryGroupId = jobs2.SettingsId AND jobs2.DispatchType = 'Data.Matter;DataExtract'