如何计算具有式为一列中的值,该公式变量从相同的SQL Server表

问题描述:

我有表的内容如本图像是列:如何计算具有式为一列中的值,该公式变量从相同的SQL Server表

screenshot

公式列包含该列名称作为公式表达式中的变量。

我试图得到相应的方法,能动态地计算在公式列中给出的公式,根据每个emp_idTsk_idprocessed date计算列得分,并把它推到一个临时表

我曾尝试通过使用下面的代码已经成功的游标中的动态SQL来实现它。任何人都可以提出一个更好的方式来做到这一点,也许使用CTE或什么?

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

我真的不需要在这里使用游标。你可以在一个动态SQL查询中选择它,不是吗? –

没有这是最简单的方法(最小的重写)。您可以通过将我们的公式重写为函数来访问它。

+0

谢谢Deadsheep,但这里没有定义的一套公式,它可能会因每行不同而有所不同。因此,将公式写入函数中我相信只会限制一组固定的公式,这些公式会要求硬编码,目标是动态地进行计算。 – Bineet