我在sql server中定义了一些用户定义的函数。例如:
select dbo.SumItems(1 , 2)
将返回3
和
select dbo.MaxItems(5 , 3)
将返回5
和其他一些功能可能会更复杂。 我还将变量及其公式表达式保存在表中:
IdVar Title Formula
----- ----- ---------------------
1 Sum dbo.SumItems(@a , @b)
2 Max dbo.maxItems(@a , @b)
我的参数在另一张表中:
a b
-- --
1 2
5 3
现在我想加入这两个表并获得以下结果:
Parameter a Parameter b Variable Title Result
----------- ----------- -------------- ------
1 2 Sum 3
1 2 Max 2
5 3 Sum 8
5 3 Max 5
我也从另一个视图here询问了我的问题。
答案 0 :(得分:1)
昨天发布了与此类似的内容。如您所知,您只能使用动态sql执行此类功能。
现在,我没有你的功能,所以你必须提供这些功能。
我过去曾做过非常相似的事情来计算一次通过多个收入/资产负债表的一系列比率
以下是一种方法。 (但是,我没有挖掘这两个参数......似乎有点受限,但我确定你可以根据需要进行扩展)
Declare @Formula table (ID int,Title varchar(25),Formula varchar(max))
Insert Into @Formula values
(1,'Sum' ,'@a+@b')
,(2,'Multiply','@a*@b')
Declare @Parameter table (a varchar(50),b varchar(50))
Insert Into @Parameter values
(1,2),
(5,3)
Declare @SQL varchar(max)=''
;with cte as (
Select A.ID
,A.Title
,ParameterA = A
,ParameterB = B
,Expression = Replace(Replace(Formula,'@a',a),'@b',b)
From @Formula A
Cross Join @Parameter B
)
Select @SQL = @SQL+concat(',(',ID,',',ParameterA,',',ParameterB,',''',Title,''',(',Expression,'))') From cte
Select @SQL = 'Select * From ('+Stuff(@SQL,1,1,'values')+') N(ID,ParameterA,ParameterB,Title,Value)'
Exec(@SQL)
-- Optional To Trap Results in a Table Variable
--Declare @Results table (ID int,ParameterA varchar(50),ParameterB varchar(50),Title varchar(50),Value float)
--Insert Into @Results Exec(@SQL)
--Select * from @Results
返回
ID ParameterA ParameterB Title Value
1 1 2 Sum 3
2 1 2 Multiply 2
1 5 3 Sum 8
2 5 3 Multiply 15