我需要一个查询来运行循环,但是我想合并结果。如何忽略查询中的最后一个并集?
这是我的查询:
DECLARE @Initialvalue INT;
DECLARE @MaxValue INT;
SET @Initialvalue = 1;
SET @MaxValue = 6;
WHILE @Initialvalue < @MaxValue
BEGIN
DECLARE @SQL VARCHAR(max)
SET @SQL =
'SELECT SerialNo,( SELECT MAX(EPOCH) as Epoch FROM ['
+ (SELECT serialno
FROM (SELECT [pointnumber],
[pointtype],
Row_number() OVER (partition BY [pointtype] ORDER BY PC.id) AS rn,
IC.serialno
FROM [TBP].[dbo].[pointconfig] PC
INNER JOIN [ipiconfig] IC
ON IC.sensorname = PC.pointnumber
WHERE active = 1
AND [pointtype] = 'IPI') A
WHERE rn = @Initialvalue)
+
']) FROM (SELECT [PointNumber],[PointType],ROW_NUMBER() OVER (PARTITION BY [PointType] ORDER BY PC.ID) AS rn,IC.SerialNo FROM [TBP].[dbo].[PointConfig] PC INNER JOIN [IPIConfig] IC on IC.SensorName = PC.PointNumber WHERE Active = 1 and [PointType] = ''IPI'') A WHERE rn = '
+ Char(39)
+ Cast(@Initialvalue AS VARCHAR(5))
+ Char(39) + ' UNION ALL '
SET @Initialvalue = @Initialvalue + 1;
EXEC ( @SQL )
END
如果我打印(@ SQL),则这是打印的查询:
SELECT SerialNo,( SELECT MAX(EPOCH) as Epoch FROM [8624]) FROM (SELECT [PointNumber],[PointType],ROW_NUMBER() OVER (PARTITION BY [PointType] ORDER BY PC.ID) AS rn,IC.SerialNo FROM [TBP].[dbo].[PointConfig] PC INNER JOIN [IPIConfig] IC on IC.SensorName = PC.PointNumber WHERE Active = 1 and [PointType] = 'IPI') A WHERE rn = '1' UNION ALL
SELECT SerialNo,( SELECT MAX(EPOCH) as Epoch FROM [8696]) FROM (SELECT [PointNumber],[PointType],ROW_NUMBER() OVER (PARTITION BY [PointType] ORDER BY PC.ID) AS rn,IC.SerialNo FROM [TBP].[dbo].[PointConfig] PC INNER JOIN [IPIConfig] IC on IC.SensorName = PC.PointNumber WHERE Active = 1 and [PointType] = 'IPI') A WHERE rn = '2' UNION ALL
SELECT SerialNo,( SELECT MAX(EPOCH) as Epoch FROM [8667]) FROM (SELECT [PointNumber],[PointType],ROW_NUMBER() OVER (PARTITION BY [PointType] ORDER BY PC.ID) AS rn,IC.SerialNo FROM [TBP].[dbo].[PointConfig] PC INNER JOIN [IPIConfig] IC on IC.SensorName = PC.PointNumber WHERE Active = 1 and [PointType] = 'IPI') A WHERE rn = '3' UNION ALL
SELECT SerialNo,( SELECT MAX(EPOCH) as Epoch FROM [8523]) FROM (SELECT [PointNumber],[PointType],ROW_NUMBER() OVER (PARTITION BY [PointType] ORDER BY PC.ID) AS rn,IC.SerialNo FROM [TBP].[dbo].[PointConfig] PC INNER JOIN [IPIConfig] IC on IC.SensorName = PC.PointNumber WHERE Active = 1 and [PointType] = 'IPI') A WHERE rn = '4' UNION ALL
SELECT SerialNo,( SELECT MAX(EPOCH) as Epoch FROM [8678]) FROM (SELECT [PointNumber],[PointType],ROW_NUMBER() OVER (PARTITION BY [PointType] ORDER BY PC.ID) AS rn,IC.SerialNo FROM [TBP].[dbo].[PointConfig] PC INNER JOIN [IPIConfig] IC on IC.SensorName = PC.PointNumber WHERE Active = 1 and [PointType] = 'IPI') A WHERE rn = '5' UNION ALL
如何从循环中删除最终查询上的UNION ALL?