首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 跨表查询解决思路

2012-12-15 
SQL 跨表查询A表 字段 NONAME11111 张三B表 字段 NOMONEY11111 100011111 50011111 200022222 300..... ..

SQL 跨表查询
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
[最优解释]

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 行受影响)

[其他解释]
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
 
        
  
[其他解释]
不明白第二个3500怎么来的
[其他解释]
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    
[其他解释]
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



[其他解释]
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

[其他解释]

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


[其他解释]
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
[其他解释]
引用:
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
这个贴子也没结,你回复一下,把分送你。谢谢。

热点排行