急,急,急,求大神帮助,谢谢了

墨白一凡 2015-03-28 05:29:08
己知:

A表:

AID B C E
1 A D 22
2 C E 54
3 G B 45
4 B X 55
5 Z C 5


B表:

BID AID Z L
1 1 D 44
2 3 B 22
3 3 B 5

求一新表:C

其中,A是主表 ,A表与B表有主外键关系

求B表中如果有包含A表AID的数据,那么,那么A表中的E就是E减去B表中的L

如果没有包含,A表中的数据不变.

结果还是A表中的数据条数不变

只不过E的值变了.
...全文
210 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Neo_whl 2015-03-30
  • 打赏
  • 举报
回复
引用
create view c as select A.AID,col=(case when A.AID=B.BID then B.L-E else E end) from A,B
--修订下:

create view c
as
   select distinct B,C,A.AID,col=(case when A.AID=B.BID then B.L-E else E end)  from A left join B on A.AID=B.BID
Tiger_Zhao 2015-03-30
  • 打赏
  • 举报
回复
/* 测试数据
WITH A(AID,B,C,E) AS (
SELECT 1,'A','D',22 UNION ALL
SELECT 2,'C','E',54 UNION ALL
SELECT 3,'G','B',45 UNION ALL
SELECT 4,'B','X',55 UNION ALL
SELECT 5,'Z','C',5
)
,B(BID,AID,Z,L) AS (
SELECT 1,1,'D',44 UNION ALL
SELECT 2,3,'B',22 UNION ALL
SELECT 3,3,'B',5
) */
SELECT A.AID,
A.B,
A.C,
A.E - ISNULL(SB.L,0) E
FROM A
LEFT JOIN (
SELECT AID,
SUM(L) L
FROM B
GROUP BY AID
) SB
ON A.AID = SB.AID

        AID B    C              E
----------- ---- ---- -----------
1 A D -22
2 C E 54
3 G B 18
4 B X 55
5 Z C 5
frankl123 2015-03-30
  • 打赏
  • 举报
回复
5楼完美解决
Neo_whl 2015-03-28
  • 打赏
  • 举报
回复

create view c
as
    select A.AID,col=(case when A.AID=B.BID then B.L-E else E end)  from A,B
墨白一凡 2015-03-28
  • 打赏
  • 举报
回复
不好意思,我没说清楚,我要做个视图,这个视图的内容,就是你上面UPDATE修改后的表内容
墨白一凡 2015-03-28
  • 打赏
  • 举报
回复
求是生出的第三张表为C,正是你上面写的这个数据 不是修改
Neo_whl 2015-03-28
  • 打赏
  • 举报
回复


--求一新表c? 没明白,这样?

   update A set E=B.L-E from B where A.AID=B.BID

27,579

社区成员

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

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