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

求取二张表的数据

2012-12-30 
求取2张表的数据求取两张表的数据,谢谢,表TB1 prodid month yearno1P015123000P025122000P036122010表TB2p

求取2张表的数据
求取两张表的数据,谢谢,
表TB1 
prodid month year  no1
P01    5     12    3000
P02    5     12    2000
P03    6     12    2010


表TB2
prodid month year no2
P01    5     12   6000
P02    5     12   7000
P06    6     12   4000

希望得到结果:
prodid month year  no1   no2
P01    5     12    3000  6000
P02    5     12    2000  7000
P03    6     12    2010  0
P06    6     12    0     4000

[解决办法]
select isnull(a.prodid,b.prodid) prodid, isnull(a.month,b.month) month,
isnull(a.year,b.year) year,isnull(no1,0) no1,isnull(no2,0) no2
from tb1 as a full join tb2 as b on a.prodid=b.prodid and a.month=b.month and a.year=b.year
[解决办法]

create table TB1
(
id varchar(20) not null,
[month] int null,
[year] int null,
no1 varchar(20) null
)

create table TB2
(
id varchar(20) not null,
[month] int null,
[year] int null,
no2 varchar(20) null
)

insert into tb1
select 'po1',5,12,3000 union
select 'po2',5,12,2000 union
select 'po3',6,12,2010 

insert into tb2
select 'po1',5,12,6000 union
select 'po2',5,12,7000 union
select 'po6',6,12,4000 

select isnull(a.id,b.id) id, isnull(a.month,b.month) month,
isnull(a.year,b.year) year,isnull(a.no1,0) no1,isnull(b.no2,0) no2
from TB1 a full join TB2 b
on a.id=b.id

[解决办法]
--CREATE TABLE TB1
--    (
--      id VARCHAR(20) NOT NULL ,
--      [month] INT NULL ,
--      [year] INT NULL ,
--      no1 VARCHAR(20) NULL
--    )
--CREATE TABLE TB2
--    (
--      id VARCHAR(20) NOT NULL ,
--      [month] INT NULL ,
--      [year] INT NULL ,
--      no2 VARCHAR(20) NULL
--    )
--INSERT  INTO tb1
--        SELECT  'po1' ,
--                5 ,
--                12 ,


--                3000
--        UNION ALL
--        SELECT  'po2' ,
--                5 ,
--                12 ,
--                2000
--        UNION ALL
--        SELECT  'po3' ,
--                6 ,
--                12 ,
--                2010
--INSERT  INTO tb2
--        SELECT  'po1' ,
--                5 ,
--                12 ,
--                6000
--        UNION ALL
--        SELECT  'po2' ,
--                5 ,
--                12 ,
--                7000
--        UNION ALL
--        SELECT  'po6' ,
--                6 ,
--                12 ,
--                4000 


SELECT  CASE WHEN a.id IS NULL THEN b.id ELSE a.id
        END id ,
        CASE WHEN a.MONTH IS NULL THEN b.MONTH ELSE a.MONTH
        END MONTH ,
        CASE WHEN a.year IS NULL THEN b.YEAR ELSE a.YEAR
        END year ,
        ISNULL(a.no1, 0) no1 ,
        ISNULL(b.no2, 0) no2
FROM    tb1 a
        FULL  JOIN tb2 b ON a.id = b.id
                            AND a.MONTH = B.MONTH
                            
/*
id                   MONTH       year        no1                  no2


-------------------- ----------- ----------- -------------------- --------------------
po1                  5           12          3000                 6000
po2                  5           12          2000                 7000
po3                  6           12          2010                 0
po6                  6           12          0                    4000

(4 行受影响)
*/


[解决办法]
引用:
SQL code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768--CREATE TABLE TB1--    (--      id VARCHAR(20) NOT……

这个号,三个表也可以,谢谢了
[解决办法]
引用:
引用:
SQL code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768--CREATE TABLE TB1--    (--      id VAR……
只有两个列对比的时候,用isnull的确省事点。三个的话甚至多个的话,就比较麻烦,但是解决楼主的问题,isnull就够了,我只是不想发一样的,说我抄

热点排行