0

J'ai le contenu de la table comme le montre cette image:Comment calculer les valeurs d'une colonne de formules, les variables de formule étant des colonnes de la même SQL Server Table

screenshot

La colonne de formule contient la les noms de colonne en tant que variables dans l'expression de formule.

Je suis en train d'obtenir un score de colonne calculée correspondant à chaque emp_id, Tsk_id et processed date qui serait calculé dynamiquement en fonction des formules données dans la colonne de la formule et le pousser à une table temporaire

J'ai essayé de l'atteindre par SQL dynamique dans un curseur en utilisant le code ci-dessous qui a réussi. Quelqu'un peut-il suggérer une meilleure façon de le faire, peut-être en utilisant un CTE ou quelque chose?

DECLARE @EMP_ID nVARCHAR(255) 
DECLARE @TSK_ID nVARCHAR(255) 
DECLARE @PROCESSEDDATE nVARCHAR(255) 
DECLARE @SQLCMD nVARCHAR(max) 
DECLARE @SQLTEXT nvarchar(max) 

DECLARE db_cursor CURSOR FOR 

SELECT EMP_ID,TSK_ID,PROCESSEDDATE from dbo.[Formula_Cal] group by EMP_ID,TSK_ID,PROCESSEDDATE 


OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @EMP_ID,@TSK_ID,@PROCESSEDDATE 

WHILE @@FETCH_STATUS = 0 

BEGIN 

     Set @SQLTEXT = (Select formula from dbo.[Formula_Cal] where [email protected]_ID and TSK_ID [email protected]_ID and [email protected]) 
     Set @SQLCMD ='select emp_id,TSK_ID,convert(decimal(18,2),(' [email protected]+ ')) As Score FROM [Formula_Cal] where TSK_ID = '[email protected]_ID+' and EMP_ID = '[email protected]_ID 
     --Select @SQLTEXT 
     --Select @SQLCMD 
     insert into dbo.TMP_ACHSCR(emp_id,TSK_id,Score) 
     Exec sp_executesql @SQLCMD 

     FETCH NEXT FROM db_cursor INTO @EMP_ID,@TSK_ID,@PROCESSEDDATE 
END 



CLOSE db_cursor 
DEALLOCATE db_cursor 
+1

codereview.stackexchange.com – scsimon

+0

Je ne vois pas vraiment le besoin d'un curseur ici. Vous pouvez simplement sélectionner tout cela dans une requête SQL dynamique, non? –

Répondre

0

Non, ce n'est pas le moyen le plus simple (avec une réécriture minimale). Vous pouvez y accéder en réécrivant nos formules en fonction.

+0

Merci Deadsheep, mais il n'y a aucun ensemble défini de formules utilisées ici, il peut varier pour chaque ligne. Donc écrire des formules dans une fonction je crois ne se limiterait qu'à un ensemble fixe de formules qui demanderaient un codage en dur, le but étant de faire le calcul dynamiquement. – Bineet