求助:有两个表,一个用于存储数据,一个用于存储公式,如何根据这个两个表求出公式的结果。
例如:
表一:
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
请问如何实现
例如:
表一:
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
请问如何实现
解决方案 »
- SQL和SP的效率問題!
- sqlexpress启动失败
- SQL Unicode码 SQL高手 帮忙
- 两个表关联的Sql语句怎么写(内详) 谢谢
- 请网上的各位帮忙给解决一个问题谢谢!!!!!!!!!!!!!
- 有两张表,进货销售表和库存表,怎样才能在进货销售表中插入数据,库存表可自动得出该商品的进货数量,进货退货数量,销售数量,销售退货数量
- 安装SQL是是选择每客户许可,还是选处理器许可
- 如何从存储过程中得到一组数据
- 难中的难题。不是高手不用过来
- SQL如何查IP段
- 01 02 03 04 05 06和03 04 05 11 12是3个相同?还是1个或2个相同?下面执行结果(GG)还是(MM)正确?
- 请教查询效率的问题
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
godeclare @s varchar(8000)
select @s=isnull(@s+' union all ','')+'select '''+FLAG+''' as [flag],'+dbo.f_test(COMP)+' as comp' from tb2exec(@s)
--结果
/*
flag comp
---- -----------
Loa 6
BWC 24
ABC 120
ND 2880
*/
也许可以