我有一个查询,其中包含三个 RouteID 的 where 子句,因此每次返回 3 行而不是 1 行。
SELECT
A.ItemId, A.RefId, B.EquipmentName, C.PointId, C.PointDescription,
D.InspectionTimeStamp, D.AlarmCode, D.AlarmDescription,
A.RouteId, A.Type, A.SequenceNo, A.Skip, A.Item
FROM
[Trident].[Maintenance].[BasicCareEquipmentPointDetails] A
INNER JOIN
[Trident].[Maintenance].[Equipment] B ON A.ItemId = B.EquipmentId
INNER JOIN
[Trident].[Maintenance].[BasicCarePointDetails] C ON A.RouteId = C.RouteId
LEFT OUTER JOIN
[Trident].[Maintenance].[BasicCareInspectionHistory] D ON C.PointId = D.PointId
AND D.InspectionTimeStamp BETWEEN '02/18/2021' AND DATEADD(DAY, 1, '02/18/2021')
WHERE
A.RouteId IN ('RG00000792', 'RG00000800', 'RG00000801')
AND A.Skip = 0
AND A.ItemId = C.TemplateId
ORDER BY
A.RefId, A.SequenceNo DESC
这是查询的结果,每个 routeID 有 3 行,想为这些路由中的每一个以及我可能需要的任何其他列捕获警报代码,并将列名更改为一行上的别名。这样我就可以将所有三个路由放在一行中,以便 Active Reports 可以遍历有问题的数据源。
我包括我想要获得的报告的屏幕截图,每个班次都是一个 routeID。正如您所看到的,每个都有一个 FILTER/COND STRIPPER,它位于最左侧的列下方和“Flush Filters”下方的一个子行,警报代码在每个路由列中都是 Ok。
我试过使用联合和论坛不推荐它。此时,我可以在 vb.net 代码中进行三个 SQL 调用并创建所需的格式化表,然后遍历每个表并添加到自定义表中,但我觉得有更好的方法。我正在使用 SQL Server 2017 (v14.0.3281.6)。