两张表查询 插入 怎么写

karxiu 2012-03-21 10:12:42


create table S1(pname nvarchar(10),amt decimal(18,1))

insert into S1 (pname,amt) values ('01',10)
insert into S1 (pname,amt) values ('01',20)
insert into S1 (pname,amt) values ('02',30)
insert into S1 (pname,amt) values ('01',40)
insert into S1 (pname,amt) values ('05',40)
insert into S1 (pname,amt) values ('05',40)

create table S2(pname nvarchar(10),paid decimal(18,1))

insert into S2 (pname,paid ) values ('01',10)
insert into S2 (pname,paid ) values ('02',20)
insert into S2 (pname,paid ) values ('02',30)
insert into S2 (pname,paid ) values ('03',40)
insert into S2 (pname,paid ) values ('04',40)

create table S3(pname nvarchar(10),amt decimal(18,1),paid decimal(18,1))



查询S1与S2然后 结果写入 S3

pname amt paid
01 70 10
02 30 50
03 0 40
04 0 40
05 80 0


S3显示所有的PNAME,如果S1或者S2中没有,相应的数据为0。因为S1与S2是变化的 所有S1与S2中的PNAME 是不确定的
...全文
49 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

create table S1(pname nvarchar(10),amt decimal(18,1))

insert into S1 (pname,amt) values ('01',10)
insert into S1 (pname,amt) values ('01',20)
insert into S1 (pname,amt) values ('02',30)
insert into S1 (pname,amt) values ('01',40)
insert into S1 (pname,amt) values ('05',40)
insert into S1 (pname,amt) values ('05',40)

create table S2(pname nvarchar(10),paid decimal(18,1))

insert into S2 (pname,paid ) values ('01',10)
insert into S2 (pname,paid ) values ('02',20)
insert into S2 (pname,paid ) values ('02',30)
insert into S2 (pname,paid ) values ('03',40)
insert into S2 (pname,paid ) values ('04',40)

create table S3(pname nvarchar(10),amt decimal(18,1),paid decimal(18,1))

insert S3
select isnull(ap,bp) as pname,isnull(amt,0) as amt,
isnull(paid,0) as paid from(
select * from(
select pname as ap,SUM(amt) as amt from s1
group by pname)a
full join (select pname as bp,SUM(paid) as paid from s2
group by pname)b on a.ap=b.bp)c
select * from S3
/*
pname amt paid
01 70.0 10.0
02 30.0 50.0
03 0.0 40.0
04 0.0 40.0
05 80.0 0.0
*/
楼上作废
karxiu 2012-03-21
  • 打赏
  • 举报
回复
好像是达到要求了 谢谢
  • 打赏
  • 举报
回复

create table S1(pname nvarchar(10),amt decimal(18,1))

insert into S1 (pname,amt) values ('01',10)
insert into S1 (pname,amt) values ('01',20)
insert into S1 (pname,amt) values ('02',30)
insert into S1 (pname,amt) values ('01',40)
insert into S1 (pname,amt) values ('05',40)
insert into S1 (pname,amt) values ('05',40)

create table S2(pname nvarchar(10),paid decimal(18,1))

insert into S2 (pname,paid ) values ('01',10)
insert into S2 (pname,paid ) values ('02',20)
insert into S2 (pname,paid ) values ('02',30)
insert into S2 (pname,paid ) values ('03',40)
insert into S2 (pname,paid ) values ('04',40)

create table S3(pname nvarchar(10),amt decimal(18,1),paid decimal(18,1))

insert S3
select apname as pname,sum(isnull(amt,0)) as amt,sum(paid) as paid from(
select isnull(a.pname,b.pname) as apname,SUM(a.amt) as amt,isnull(b.pname,a.pname) as bpname,
isnull(b.paid,0) paid
from S1 a full join S2 b on a.pname=b.pname
group by a.pname,b.pname,b.paid
)c group by apname order by pname

select * from S3

/*
pname amt paid
01 70.0 10.0
02 60.0 50.0
03 0.0 40.0
04 0.0 40.0
05 80.0 0.0
*/

更正一下
  • 打赏
  • 举报
回复

create table S1(pname nvarchar(10),amt decimal(18,1))

insert into S1 (pname,amt) values ('01',10)
insert into S1 (pname,amt) values ('01',20)
insert into S1 (pname,amt) values ('02',30)
insert into S1 (pname,amt) values ('01',40)
insert into S1 (pname,amt) values ('05',40)
insert into S1 (pname,amt) values ('05',40)

create table S2(pname nvarchar(10),paid decimal(18,1))

insert into S2 (pname,paid ) values ('01',10)
insert into S2 (pname,paid ) values ('02',20)
insert into S2 (pname,paid ) values ('02',30)
insert into S2 (pname,paid ) values ('03',40)
insert into S2 (pname,paid ) values ('04',40)

create table S3(pname nvarchar(10),amt decimal(18,1),paid decimal(18,1))

insert S3
select apname as pname,isnull(amt,0) as amt,paid from(
select isnull(a.pname,b.pname) as apname,SUM(a.amt) as amt,isnull(b.pname,a.pname) as bpname,
isnull(b.paid,0) paid
from S1 a full join S2 b on a.pname=b.pname
group by a.pname,b.pname,b.paid
)c order by pname

select * from S3

/*
pname amt paid
01 70.0 10.0
02 30.0 20.0
02 30.0 30.0
03 0.0 40.0
04 0.0 40.0
05 80.0 0.0
*/
karxiu 2012-03-21
  • 打赏
  • 举报
回复
S3 中 AMT PAID 是S1 与S2中的相应数据的累加

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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