繁体   English   中英

列名称中的动态SQL以获取该列的最大值

[英]Dynamic SQL in column name to get max of that column

我有以下查询,我想获得在Dynamic SQL中创建的列的最大值。 但是结果并不完全相同。 你能帮我吗?

DECLARE @RT VARCHAR(6)
SET @RT     = 'RT1401'

SELECT      max(KWh_RT1401A_BLU)    AS Test1,
            max('KWh_'+@RT+'A_BLU') AS Test2

            FROM [PlantData].[dbo].[POD14_Kwh]
            where timestamp >='2017-08-24'

结果是:

Test1         Test2
------------- ---------------
730.3399      KWh_RT1401A_BLU

您需要像下面这样的动态sql

DECLARE @RT VARCHAR(6)
SET @RT     = 'RT1401'
DECLARE @SQL VARCHAR(MAX)

SET @SQL=' SELECT max(KWh_RT1401A_BLU) AS Test1, '+
         ' max(KWh_'+@RT+'A_BLU) AS Test2 '+
         ' FROM [PlantData].[dbo].[POD14_Kwh] '+
         ' where timestamp >=''2017-08-24'''
EXEC( @SQL)

查看工作演示

根据您的评论

现在,我有一个更大的问题,我无法将日期时间传递到动态SQL中。 我也尝试使用Cast / Convert,三重引号,但仍然有问题

修改后的解决方案如下

CREATE TABLE [POD14_Kwh]( [KWh_RT1401A_BLU] int, timestamp datetime)
INSERT INTO POD14_Kwh VALUES
(730.3399,'2017-08-24 00:00:00'),(1.00,'2017-08-24 00:00:00');

DECLARE @RT VARCHAR(6)
SET @RT     = 'RT1401'
DECLARE @SQL VARCHAR(MAX)
DECLARE @dt DATETIME
SET @dt = '2017-08-24 00:00:00'



SET @SQL=' SELECT max(KWh_RT1401A_BLU) AS Test1, '+
         ' max(KWh_'+@RT+'A_BLU) AS Test2 '+
         ' FROM [POD14_Kwh] '+
         ' where timestamp >='''+CAST(@dt as varchar(max))+''''
EXEC( @SQL)

演示链接

Dhruv Joshi是正确的,您需要使用动态SQL。 在您的示例中,您创建了一个字符串,而不是引用了一个列名。 确保执行动态SQL字符串也接收所需的输出。

DECLARE @RT VARCHAR(6)
        ,@SQL VARCHAR(MAX)
SET @RT     = 'RT1401'


SET @SQL=' SELECT max(KWh_RT1401A_BLU) AS Test1, '+
         ' max(KWh_'+@RT+'A_BLU) AS Test2 '+
         ' FROM [PlantData].[dbo].[POD14_Kwh] '+
         ' where timestamp >= ''2017-08-24'''

EXEC (@SQL)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM