如何计算具有式为一列中的值,该公式变量从相同的SQL Server表
问题描述:
我有表的内容如本图像是列:如何计算具有式为一列中的值,该公式变量从相同的SQL Server表
公式列包含该列名称作为公式表达式中的变量。
我试图得到相应的方法,能动态地计算在公式列中给出的公式,根据每个emp_id
,Tsk_id
和processed 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
答
没有这是最简单的方法(最小的重写)。您可以通过将我们的公式重写为函数来访问它。
+0
谢谢Deadsheep,但这里没有定义的一套公式,它可能会因每行不同而有所不同。因此,将公式写入函数中我相信只会限制一组固定的公式,这些公式会要求硬编码,目标是动态地进行计算。 – Bineet
codereview.stackexchange.com – scsimon
我真的不需要在这里使用游标。你可以在一个动态SQL查询中选择它,不是吗? –