读书人

求取二张表的数据

发布时间: 2012-12-30 10:43:15 作者: rapoo

求取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就够了,我只是不想发一样的,说我抄

读书人网 >SQL Server

热点推荐