列名中的动态SQL以获取该列的最大值
我有下面的查询,我想获得动态SQL中创建的列的最大值。但结果并不相同。 你能帮我解答吗?列名中的动态SQL以获取该列的最大值
DECLARE @RT VARCHAR(6)
SET @RT = 'RT1401'
SELECT max(KWh_RT1401A_BLU) AS Test1,
max('KWh_'[email protected]+'A_BLU') AS Test2
FROM [PlantData].[dbo].[POD14_Kwh]
where timestamp >='2017-08-24'
,其结果是:
Test1 Test2
------------- ---------------
730.3399 KWh_RT1401A_BLU
你需要dyanmic SQL此类似下面
DECLARE @RT VARCHAR(6)
SET @RT = 'RT1401'
DECLARE @SQL VARCHAR(MAX)
SET @SQL=' SELECT max(KWh_RT1401A_BLU) AS Test1, '+
' max(KWh_'[email protected]+'A_BLU) AS Test2 '+
' FROM [PlantData].[dbo].[POD14_Kwh] '+
' where timestamp >=''2017-08-24'''
EXEC(@SQL)
根据你的意见
现在,我有更大的问题,我不能通过datetime到我的动态SQL。我也试着铸造/转换,在三重报价,但仍然有问题
修改的方案是低于
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_'[email protected]+'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_'[email protected]+'A_BLU) AS Test2 '+
' FROM [PlantData].[dbo].[POD14_Kwh] '+
' where timestamp >= ''2017-08-24'''
EXEC (@SQL)
你的答案和Dhruv joshi和 –
有什么不同吗?这是行不通的 - 你需要在括号内有exec @sql – dbajtr
我想解释为什么问题中的例子不起作用,还有许多逗号在打破字符串的日期的左侧 - 不幸的是,我无法编辑其他答案或问题。 –
非常感谢您@DhruvJoshi – Freddy
@Farhad请接受我为正确答案回应,如果它的工作对你 - 这样其他用户可以受益:从知道答案的作品,并通过其标记的问题作为回答 – DhruvJoshi
现在,我有更大的问题, 我不能将datetime传入我的动态SQL。 我也尝试投/转换,在三重报价,但仍有问题。 – Freddy