2017-10-10 13 views
0

J'ai la requête ci-dessous et je veux obtenir le maximum de colonne qui crée en SQL dynamique. Mais les résultats ne sont pas identiques. Pouvez-vous s'il vous plaît m'aider à ce sujet?SQL dynamique dans le nom de colonne pour obtenir max de cette colonne

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' 

et le résultat est:

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

Répondre

4

vous aurez besoin dyanmic sql pour cela comme ci-dessous

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

basé sur votre commentaire

Maintenant, j'ai un plus gros problème, je ne peux pas passer cette date dans mon SQL dynamique. J'essaie aussi CAST/Convertir, en triple citation mais il a encore question

solution modifiée

est inférieure à

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

Merci beaucoup @DhruvJoshi – Freddy

+0

@Farhad S'il vous plaît accepter ma réponse comme réponse correcte si elle a travaillé pour vous- afin que les utilisateurs peuvent bénéficier: de savoir que les travaux de réponse et en ayant la question marqué comme ayant – DhruvJoshi

+0

Maintenant, j'ai un plus gros problème, Je ne peux pas passer la date-heure dans mon SQL dynamique. J'essaie aussi de lancer/convertir, en guillemet triple mais j'ai toujours un problème. – Freddy

2

Dhruv Joshi est correcte, vous aurez besoin d'utiliser SQL dynamique. Dans votre exemple, vous avez créé une chaîne au lieu de référencer un nom de colonne. Assurez-vous que l'option Exécuter la chaîne SQL dynamique pour recevoir la sortie souhaitée aussi.

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

quelle est la différence entre vos ans et Dhruv joshi ans –

+0

Cela ne fonctionnerait pas - vous devez avoir l'exec @sql entre parenthèses – dbajtr

+0

Je voulais expliquer pourquoi l'exemple dans la question ne fonctionnerait pas, aussi il y avait beaucoup de virgules à gauche de la date qui a cassé la chaîne - Malheureusement, je suis incapable d'éditer d'autres réponses ou des questions. –