SQL 跨表查询

XinJW 2012-12-06 02:39:34
A表 字段 NO NAME
11111 张三
B表 字段 NO MONEY
11111 1000
11111 500
11111 2000
22222 300
..... ...
C表 字段 NO PRICE TYPE
11111 500 Retail
11111 2000 Retail
..... ... ......
求解,用一条SQL语句查询条件是B.NO=A.NO,C.NO=A.NO,C.TYPE="RETAIL"得出B.MONEY相加,和C.PRICE相加。

结果如下
NO NAME MONEY PRICE
11111 张三 3500 3500
...全文
348 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
习惯性蹭分 2012-12-06
  • 打赏
  • 举报
回复

Create table A表(NO char(8),NAME char(50)) 
Insert A表 select '11111','张三'
Create table B表(NO char(8),MONEY int) 
Insert B表 select '11111','1000'  union all 
select '11111','500' union all 
select '11111','2000' union all 
select '22222','300'   
Create table C表(NO char(8),PRICE int,TYPE char(8)) 
Insert C表 select '11111','500','Retail' union all 
select '11111','2000','Retail' 
select a.no,name,money,price
from A表 a join (
select no,SUM(money) as [money] from B表 group by NO
)as b
on a.no=b.NO
join
(select no,SUM(price) as price from
 C表 where TYPE='retail'
  group by NO) as c
on a.NO=c.NO
Mr_GY 2012-12-06
  • 打赏
  • 举报
回复
Create table A(NO char(8),NAME char(50))
Insert A
select '11111','张三' 
 
Create table B(NO char(8),MONEY int)
Insert B
select '11111','1000'  union all 
select '11111','500' union all 
select '11111','2000' union all 
select '22222','300' 
 
Create table C(NO char(8),PRICE int,TYPE char(8))
Insert C
select '11111','500','Retail' union all 
select '11111','2000','Retail' 
        
SELECT a.NO,a.NAME,SUM(b.money) AS money,
(SELECT SUM(c.price) FROM a,c WHERE a.NO=c.NO) AS price
 FROM a,b WHERE a.NO=b.no GROUP BY a.NO,a.NAME
Mr_GY 2012-12-06
  • 打赏
  • 举报
回复
Create table A(NO char(8),NAME char(50))
Insert A
select '11111','张三'

Create table B(NO char(8),MONEY int)
Insert B
select '11111','1000' union all
select '11111','500' union all
select '11111','2000' union all
select '22222','300'

Create table C(NO char(8),PRICE int,TYPE char(8))
Insert C
select '11111','500','Retail' union all
select '11111','2000','Retail'

SELECT a.NO,a.NAME,SUM(b.money) AS money,
(SELECT SUM(c.price) FROM a,c WHERE a.NO=c.NO) AS price
FROM a,b WHERE a.NO=b.no GROUP BY a.NO,a.NAME

GiveMePressure 2012-12-06
  • 打赏
  • 举报
回复
SELECT a.no, a.name, b.money, c.price FROM a INNER JOIN (SELECT b.no, SUM(b.money) AS money FROM b GROUP BY b.no)b ON a.no = b.no INNER JOIN (SELECT c.no, SUM(c.price) AS price FROM c WHERE c.type = 'Retail' GROUP BY c.no)c ON a.no = c.no
好帅的一条鱼 2012-12-06
  • 打赏
  • 举报
回复
Create table A表(NO char(8),NAME char(50))
Insert A表
select '11111','张三' 

Create table B表(NO char(8),MONEY int)
Insert B表
select '11111','1000'  union all 
select '11111','500' union all 
select '11111','2000' union all 
select '22222','300' 

Create table C表(NO char(8),PRICE int,TYPE char(8))
Insert C表
select '11111','500','Retail' union all 
select '11111','2000','Retail' 


select A.*,SUM(C表.PRICE) as PRICE from 
(select A表.NO,A表.NAME,SUM(B表.MONEY) as MONEY from A表  
inner join B表 on  A表.NO =B表.NO group by A表.NO ,A表.NAME) A,C表 
where A.NO=C表.NO group by A.NO,A.NAME,A.MONEY
NO NAME MONEY PRICE -------- ----------- 11111 张三 3500 2500 (1 行受影响)
还在加载中灬 2012-12-06
  • 打赏
  • 举报
回复
不明白第二个3500怎么来的
xuam 2012-12-06
  • 打赏
  • 举报
回复
select A.NO,    A.NAME,SUM(B.MONEY),SUM(C.PRICE)
from A  inner join B on  A.NO =B.NO
        inner join C on  A.NO =C.NO
XinJW 2012-12-06
  • 打赏
  • 举报
回复
引用 3 楼 good212164 的回复:
SQL code?123456789101112131415161718192021Create table A表(NO char(8),NAME char(50))Insert A表select '11111','张三' Create table B表(NO char(8),MONEY int)Insert B表select '11111','1000' union……
仰泳的鱼谢谢指教,太完美的答案了。 http://bbs.csdn.net/topics/390288622?page=1#post-392977725 这个贴子也没结,你回复一下,把分送你。谢谢。
我腫了 2012-12-06
  • 打赏
  • 举报
回复
select a.NO ,isnull(sum(b.MONEY),0) AS MONEY ,isnull(sum(c.PRICE),0) AS PRICE from a left join b on a.NO=b.NO left join c on a.NO=c.NO and c.TYPE='Retail' grup by a.NO

34,588

社区成员

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

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