两个数值,需要用第二个表有个公式计算

CF_HN_CN 2018-07-17 01:39:21
A表字段值为(一个字段):应发工资/销售收入

B表字段值(俩字段)为:应发工资 1000.00
销售收入 20000.00

需要得到效果为1000/20000.00的结果:0.050
...全文
159 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
CF_HN_CN 2018-07-17
  • 打赏
  • 举报
回复
引用 12 楼 sinat_28984567 的回复:
[quote=引用 11 楼 chenfeng_cstp 的回复:]
[quote=引用 10 楼 sinat_28984567 的回复:]
UPDATE dbo.b
SET b2 =
(
SELECT TOP 1 a2 FROM dbo.a WHERE b1 LIKE a1 + '/%'
) /
(
SELECT TOP 1 a2 FROM dbo.a WHERE b1 LIKE '%/' + a1
);






INSERT INTO a(a1,a2)VALUES('物流部月末人数','40.00')
INSERT INTO a(a1,a2)VALUES('物流部月初人数','60.00')

INSERT INTO a(a1,a2)VALUES('物流部人数','160.00')

INSERT INTO b(b1,b2)VALUES('财务报表销售收入/(物流部人数/2)',null)
INSERT INTO b(b1,b2)VALUES('财务报表销售收入/((物流部月末人数+物流部月初人数)/2)',null)

简单的可以,这类的复杂就有点麻烦[/quote]
公式很复杂只能动态拼接实现了[/quote]

动态拼接?
二月十六 2018-07-17
  • 打赏
  • 举报
回复
引用 11 楼 chenfeng_cstp 的回复:
[quote=引用 10 楼 sinat_28984567 的回复:]
UPDATE dbo.b
SET b2 =
(
SELECT TOP 1 a2 FROM dbo.a WHERE b1 LIKE a1 + '/%'
) /
(
SELECT TOP 1 a2 FROM dbo.a WHERE b1 LIKE '%/' + a1
);






INSERT INTO a(a1,a2)VALUES('物流部月末人数','40.00')
INSERT INTO a(a1,a2)VALUES('物流部月初人数','60.00')

INSERT INTO a(a1,a2)VALUES('物流部人数','160.00')

INSERT INTO b(b1,b2)VALUES('财务报表销售收入/(物流部人数/2)',null)
INSERT INTO b(b1,b2)VALUES('财务报表销售收入/((物流部月末人数+物流部月初人数)/2)',null)

简单的可以,这类的复杂就有点麻烦[/quote]
公式很复杂只能动态拼接实现了
CF_HN_CN 2018-07-17
  • 打赏
  • 举报
回复
引用 10 楼 sinat_28984567 的回复:
UPDATE dbo.b
SET b2 =
(
SELECT TOP 1 a2 FROM dbo.a WHERE b1 LIKE a1 + '/%'
) /
(
SELECT TOP 1 a2 FROM dbo.a WHERE b1 LIKE '%/' + a1
);






INSERT INTO a(a1,a2)VALUES('物流部月末人数','40.00')
INSERT INTO a(a1,a2)VALUES('物流部月初人数','60.00')

INSERT INTO a(a1,a2)VALUES('物流部人数','160.00')

INSERT INTO b(b1,b2)VALUES('财务报表销售收入/(物流部人数/2)',null)
INSERT INTO b(b1,b2)VALUES('财务报表销售收入/((物流部月末人数+物流部月初人数)/2)',null)

简单的可以,这类的复杂就有点麻烦
二月十六 2018-07-17
  • 打赏
  • 举报
回复
UPDATE dbo.b
SET b2 =
(
SELECT TOP 1 a2 FROM dbo.a WHERE b1 LIKE a1 + '/%'
) /
(
SELECT TOP 1 a2 FROM dbo.a WHERE b1 LIKE '%/' + a1
);


听雨停了 2018-07-17
  • 打赏
  • 举报
回复

CREATE TABLE a(a1 varchar(40),a2 numeric(18,2))
/*a1->指标名称,a2->指标名称对应数值内容 */

INSERT INTO a(a1,a2)VALUES('应发工资','1000.00')
INSERT INTO a(a1,a2)VALUES('销售收入','20000.00')
INSERT INTO a(a1,a2)VALUES('研发支出','22300.00')
INSERT INTO a(a1,a2)VALUES('年度财务费用','12300.00')
INSERT INTO a(a1,a2)VALUES('超期应收','6300.00')
INSERT INTO a(a1,a2)VALUES('新产品销售收入','13000.00')


CREATE TABLE b(b1 varchar(40),b2 numeric(18,2))
/*b1->公式名称,b2->对应公式核算结果 */
INSERT INTO b(b1,b2)VALUES('应发工资/销售收入',null)
INSERT INTO b(b1,b2)VALUES('销售收入/新产品销售收入',null)
INSERT INTO b(b1,b2)VALUES('销售收入/研发支出',null)
INSERT INTO b(b1,b2)VALUES('销售收入/年度财务费用',null);

WITH cte AS (
SELECT left(b1,CHARINDEX('/',b1)-1) AS f_b1,
right(b1,len(b1)-CHARINDEX('/',b1)) AS l_b1,
b.b1
FROM b
)
SELECT c.*,a.a2,b.a2,cast(a.a2/b.a2 AS NUMERIC(12,4)) AS b2 FROM cte AS c
INNER JOIN a AS a ON c.f_b1=a.a1
INNER JOIN a AS b ON c.l_b1=b.a1

卖水果的net 2018-07-17
  • 打赏
  • 举报
回复

update b
set b2 = (select a2 from a where a.a1 = substring(b.b1,0, charindex('/',b.b1, 0)))
/
(select a2 from a where a.a1 = substring(b.b1, charindex('/',b.b1, 0) + 1 , 30))
go
select * from b
go
CF_HN_CN 2018-07-17
  • 打赏
  • 举报
回复
引用 6 楼 sinat_28984567 的回复:
[quote=引用 4 楼 chenfeng_cstp 的回复:]
[quote=引用 1 楼 wmxcn2000 的回复:]
楼主给出测试数据,和你想要的结果,数据尽可能的多一些。你应该还有好多需求没说出来.


不好意思,昨天晚上比较急,忘记贴上测试数据;

CREATE TABLE a(a1 varchar(40),a2 numeric(18,2))
/*a1->指标名称,a2->指标名称对应数值内容 */

INSERT INTO a(a1,a2)VALUES('应发工资','1000.00')
INSERT INTO a(a1,a2)VALUES('销售收入','20000.00')
INSERT INTO a(a1,a2)VALUES('研发支出','22300.00')
INSERT INTO a(a1,a2)VALUES('年度财务费用','12300.00')
INSERT INTO a(a1,a2)VALUES('超期应收','6300.00')
INSERT INTO a(a1,a2)VALUES('新产品销售收入','13000.00')


CREATE TABLE b(b1 varchar(40),b2 numeric(18,2))
/*b1->公式名称,b2->对应公式核算结果 */
INSERT INTO b(b1,b2)VALUES('应发工资/销售收入',null)
INSERT INTO b(b1,b2)VALUES('销售收入/新产品销售收入',null)
INSERT INTO b(b1,b2)VALUES('销售收入/研发支出',null)
INSERT INTO b(b1,b2)VALUES('销售收入/年度财务费用',null)[/quote]
B表和A表关联字段是啥?没关联?[/quote]

A表的指标,存在于B表的公式里面
二月十六 2018-07-17
  • 打赏
  • 举报
回复
引用 4 楼 chenfeng_cstp 的回复:
[quote=引用 1 楼 wmxcn2000 的回复:]
楼主给出测试数据,和你想要的结果,数据尽可能的多一些。你应该还有好多需求没说出来.


不好意思,昨天晚上比较急,忘记贴上测试数据;

CREATE TABLE a(a1 varchar(40),a2 numeric(18,2))
/*a1->指标名称,a2->指标名称对应数值内容 */

INSERT INTO a(a1,a2)VALUES('应发工资','1000.00')
INSERT INTO a(a1,a2)VALUES('销售收入','20000.00')
INSERT INTO a(a1,a2)VALUES('研发支出','22300.00')
INSERT INTO a(a1,a2)VALUES('年度财务费用','12300.00')
INSERT INTO a(a1,a2)VALUES('超期应收','6300.00')
INSERT INTO a(a1,a2)VALUES('新产品销售收入','13000.00')


CREATE TABLE b(b1 varchar(40),b2 numeric(18,2))
/*b1->公式名称,b2->对应公式核算结果 */
INSERT INTO b(b1,b2)VALUES('应发工资/销售收入',null)
INSERT INTO b(b1,b2)VALUES('销售收入/新产品销售收入',null)
INSERT INTO b(b1,b2)VALUES('销售收入/研发支出',null)
INSERT INTO b(b1,b2)VALUES('销售收入/年度财务费用',null)[/quote]
B表和A表关联字段是啥?没关联?
二月十六 2018-07-17
  • 打赏
  • 举报
回复
放一个表,A表一个字段没什么意义,在读取显示的时候直接
select *,应发工资/销售收入 from B


如果A表是多个字段和B表有关联字段,给A表加一个触发器,在A表加入数据的时候,给B表也添加数据
CF_HN_CN 2018-07-17
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
楼主给出测试数据,和你想要的结果,数据尽可能的多一些。你应该还有好多需求没说出来.


不好意思,昨天晚上比较急,忘记贴上测试数据;

CREATE TABLE a(a1 varchar(40),a2 numeric(18,2))
/*a1->指标名称,a2->指标名称对应数值内容 */

INSERT INTO a(a1,a2)VALUES('应发工资','1000.00')
INSERT INTO a(a1,a2)VALUES('销售收入','20000.00')
INSERT INTO a(a1,a2)VALUES('研发支出','22300.00')
INSERT INTO a(a1,a2)VALUES('年度财务费用','12300.00')
INSERT INTO a(a1,a2)VALUES('超期应收','6300.00')
INSERT INTO a(a1,a2)VALUES('新产品销售收入','13000.00')


CREATE TABLE b(b1 varchar(40),b2 numeric(18,2))
/*b1->公式名称,b2->对应公式核算结果 */
INSERT INTO b(b1,b2)VALUES('应发工资/销售收入',null)
INSERT INTO b(b1,b2)VALUES('销售收入/新产品销售收入',null)
INSERT INTO b(b1,b2)VALUES('销售收入/研发支出',null)
INSERT INTO b(b1,b2)VALUES('销售收入/年度财务费用',null)
CF_HN_CN 2018-07-17
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
楼主给出测试数据,和你想要的结果,数据尽可能的多一些。你应该还有好多需求没说出来.

不好意思,昨天晚上比较急,忘记贴上测试数据;

CREATE TABLE a(a1 varchar(40),a2 numeric(18,2))
/*a1->指标名称,a2->指标名称对应数值内容 */

INSERT INTO a(a1,a2)VALUES('应发工资','1000.00')
INSERT INTO a(a1,a2)VALUES('销售收入','20000.00')
INSERT INTO a(a1,a2)VALUES('研发支出','22300.00')
INSERT INTO a(a1,a2)VALUES('年度财务费用','12300.00')
INSERT INTO a(a1,a2)VALUES('超期应收','6300.00')
INSERT INTO a(a1,a2)VALUES('新产品销售收入','13000.00')


CREATE TABLE b(b1 varchar(40),b2 numeric(18,2))
/*b1->公式名称,b2->对应公式核算结果 */
INSERT INTO b(b1,b2)VALUES('应发工资/销售收入',null)
INSERT INTO b(b1,b2)VALUES('销售收入/新产品销售收入',null)
INSERT INTO b(b1,b2)VALUES('销售收入/研发支出',null)
INSERT INTO b(b1,b2)VALUES('销售收入/年度财务费用',null)
shinger126 2018-07-17
  • 打赏
  • 举报
回复
动态来整咯。第一步,把表B行转列,转为 应发工资 销售收入
1000 2000
这种格式。第二步,从表A获取公式,拼接成SQL语句,然后从行转列的结果中查询。
卖水果的net 2018-07-17
  • 打赏
  • 举报
回复
楼主给出测试数据,和你想要的结果,数据尽可能的多一些。你应该还有好多需求没说出来.
shinger126 2018-07-17
  • 打赏
  • 举报
回复
DECLARE @sql NVARCHAR(MAX)
SET @sql=N';with t as (select '+STUFF((SELECT ','+'max(case when a1='''+a1+''' THEN a2 else 0 end) as '+a1 FROM dbo.a FOR xml PATH('')),1,1,'')+
' from a )'
DECLARE @sqlstr NVARCHAR(MAX)
DECLARE @b1 NVARCHAR(200)
DECLARE c2 CURSOR FOR SELECT b1 FROM dbo.b
OPEN c2
FETCH NEXT FROM c2 INTO @b1
WHILE @@FETCH_STATUS=0
BEGIN
SET @sqlstr=@sql+'UPDATE b SET b.b2='+@b1+' from t where b1= '''+@b1+''''
PRINT @sqlstr
EXEC sp_executesql @sqlstr
FETCH NEXT FROM c2 INTO @b1
END
CLOSE c2
DEALLOCATE c2

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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