表1:行号 表2取值或公式 项目h1 1 原料采购
h2 1 生产领用
h3 0 h1-h2
h4 1 国内销售
h5 1 国外销售
h6 0 h4+h5表2:项目 值原料采购 7
生产领用 4
国内销售 11
国外销售 5
所得结果:行号 值
h1 7
h2 4
h3 3
h4 11
h5 5
h6 16
h2 1 生产领用
h3 0 h1-h2
h4 1 国内销售
h5 1 国外销售
h6 0 h4+h5表2:项目 值原料采购 7
生产领用 4
国内销售 11
国外销售 5
所得结果:行号 值
h1 7
h2 4
h3 3
h4 11
h5 5
h6 16
INSERT t1 SELECT 'h1' , 1, '原料采购'
UNION ALL SELECT 'h2' , 1, '生产领用'
UNION ALL SELECT 'h3' , 0 , 'h1-h2'
UNION ALL SELECT 'h4' , 1, '国内销售'
UNION ALL SELECT 'h5' , 1, '国外销售'
UNION ALL SELECT 'h6', 0, 'h4+h5'
CREATE TABLE t2 (c VARCHAR(20),num INT)
INSERT t2 SELECT '原料采购' , 7
UNION ALL SELECT '生产领用', 4
UNION ALL SELECT '国内销售' , 11
UNION ALL SELECT '国外销售' , 5
SELECT base.a,base.b,
CASE WHEN CHARINDEX('-',base.c)>0 THEN x.num-y.num
WHEN CHARINDEX('+',base.c)>0 THEN x.num+y.num
ELSE x.num END
FROM
(SELECT a.a a ,a.b b,REPLACE(REPLACE(a.c,b.a,b.c),c.a,c.c) c
FROM t1 a
INNER JOIN t1 b
ON CHARINDEX(' ' + b.a, ' ' + a.c)>0
INNER JOIN t1 c
ON CHARINDEX('+' + c.a,a.c)>0 OR CHARINDEX('-' + c.a,a.c)>0
UNION ALL
SELECT a,b,c FROM t1 WHERE c NOT LIKE 'h[1-9]%'
) base
LEFT JOIN t2 x
ON CHARINDEX(' '+x.c,' '+base.c)>0
LEFT JOIN t2 y
ON CHARINDEX('+'+y.c,base.c)>0 OR CHARINDEX('-'+y.c,base.c)>0
ORDER BY base.a
DROP TABLE t1
DROP TABLE t2/*result
a b num
h1 1 7
h2 1 4
h3 0 3
h4 1 11
h5 1 5
h6 0 16
*/