SQL 表公式计算问题

smh05128 2010-07-20 04:45:56
求助:有两个表,一个用于存储数据,一个用于存储公式,如何根据这个两个表求出公式的结果。
例如:
表一:
FLAG VALUE
A 2
B 3
C 5
D 4
表二:
FLAG COMP
Loa A*B
BWC Loa*D
ABC BWC*C
ND ABC*BWC

需要得出:
Loa 6
BWC 24
ABC 120
ND 2880


请问如何实现
...全文
129 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
永生天地 2010-07-20
  • 打赏
  • 举报
回复
--建立测试环境
IF OBJECT_ID('tb1') IS NOT NULL DROP TABLE tb1
GO
CREATE TABLE tb1
(
FLAG varchar(10),
VALUE int
)
GO
INSERT TB1
SELECT 'A' , 2 union all
SELECT 'B' , 3 union all
SELECT 'C' , 5 union all
SELECT 'D' , 4
go
IF OBJECT_ID('tb2') IS NOT NULL DROP TABLE tb2
GO
CREATE TABLE tb2
(
FLAG varchar(10),
COMP varchar(20)
)
GO
INSERT TB2
SELECT 'Loa' , 'A*B' union all
SELECT 'BWC' , 'Loa*D' union all
SELECT 'ABC', 'BWC*C' union all
SELECT 'ND' ,'ABC*BWC'
go
--查询
IF OBJECT_ID('f_test') IS NOT NULL DROP function f_test
GO
create function f_test(@s varchar(20))
returns varchar(20)
as
begin
while exists(select 1 from tb2 where charindex(FLAG,@s)>0)
select @s=replace(@s,FLAG,COMP) from tb2 where charindex(FLAG,@s)>0
select @s=replace(@s,FLAG,VALUE) from tb1 where charindex(FLAG,@s)>0
return @s
end
go

declare @s varchar(8000)
select @s=isnull(@s+' union all ','')+'select '''+FLAG+''' as [flag],'+dbo.f_test(COMP)+' as comp' from tb2

exec(@s)
--结果
/*
flag comp
---- -----------
Loa 6
BWC 24
ABC 120
ND 2880
*/



也许可以
dla001 2010-07-20
  • 打赏
  • 举报
回复
mark learn

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧