SQL Server-循环忽略最后一个联合

时间:2018-06-22 09:00:04

标签: sql-server

我需要一个查询来运行循环,但是我想合并结果。如何忽略查询中的最后一个并集?

这是我的查询:

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?

0 个答案:

没有答案
相关问题