2017-10-10 85 views
0

我有下面的查詢,我想獲得動態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 

回答

4

你需要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) 

See working demo

根據你的意見

現在,我有更大的問題,我不能通過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) 

demo link

+0

非常感謝您@DhruvJoshi – Freddy

+0

@Farhad請接受我爲正確答案迴應,如果它的工作對你 - 這樣其他用戶可以受益:從知道答案的作品,並通過其標記的問題作爲回答 – DhruvJoshi

+0

現在,我有更大的問題, 我不能將datetime傳入我的動態SQL。 我也嘗試投/轉換,在三重報價,但仍有問題。 – Freddy

2

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) 
+2

你的答案和Dhruv joshi和 –

+0

有什麼不同嗎?這是行不通的 - 你需要在括號內有exec @sql – dbajtr

+0

我想解釋爲什麼問題中的例子不起作用,還有許多逗號在打破字符串的日期的左側 - 不幸的是,我無法編輯其他答案或問題。 –