读书人

请高人牛人帮忙 !多谢

发布时间: 2012-01-07 21:41:55 作者: rapoo

请高人牛人帮忙 !谢谢
表1
单号 项目1
1 A
1 B
2 A
2 B
3 C
==============
表2
单号 项目2
1 A
1 C
2 C
4 A
==============
表3
单号 项目1 项目2
1 A A
1 B null
1 null C
2 A null
2 B null
2 null C
3 C null
4 null A


用sql表1和表2,创建出表3,可以利用视图、存储过程等各种方法(表3允许有空)
请写出SQL语句,谢谢大家了!!

[解决办法]
Create Table 表1
(单号 Int,
项目1 Varchar(10))
Insert 表1 Select 1, 'A '
Union All Select 1, 'B '
Union All Select 2, 'A '
Union All Select 2, 'B '
Union All Select 3, 'C '

Create Table 表2
(单号 Int,
项目2 Varchar(10))
Insert 表2 Select 1, 'A '
Union All Select 1, 'C '
Union All Select 2, 'C '
Union All Select 4, 'A '
GO
Select
IsNull(A.单号, B.单号) As 单号,
A.项目1,
B.项目2
From
表1 A
Full Join
表2 B
On A.单号 = B.单号 And A.项目1 = B.项目2
Order By
单号, IsNull(A.项目1, B.项目2)
GO
Drop Table 表1, 表2
--Result
/*
单号项目1项目2
1AA
1BNULL
1NULLC
2ANULL
2BNULL
2NULLC
3CNULL
4NULLA
*/

[解决办法]
CREATE TABLE #T1(单号 int, 项目1 nchar(1))
INSERT #T1
SELECT 1 , 'A ' UNION ALL
SELECT 1 , 'B ' UNION ALL
SELECT 2 , 'A ' UNION ALL
SELECT 2 , 'B ' UNION ALL
SELECT 3 , 'C '
CREATE TABLE #T2(单号 int, 项目2 nchar(1))
INSERT #T2
SELECT 1 , 'A ' UNION ALL
SELECT 1 , 'C ' UNION ALL
SELECT 2 , 'C ' UNION ALL
SELECT 4 , 'A '

SELECT * FROM (
SELECT A.单号,A.项目1,B.项目2 FROM #T1 AS A LEFT OUTER JOIN #T2 AS B ON A.单号=B.单号 AND B.项目2=A.项目1
UNION
SELECT A.单号,B.项目1,A.项目2 FROM #T2 AS A LEFT OUTER JOIN #T1 AS B ON A.单号=B.单号 AND B.项目1=A.项目2
) AS X ORDER BY 单号

/*
1 A A
1 B null
1 null C
2 A null
2 B null
2 null C
3 C null
4 null A
*/


DROP TABLE #T1,#T2
[解决办法]
-- yoncen 2007.06.28
/* table1 */
create table #table1(dno varchar(4),p1 varchar(6))
insert into #table1(dno,p1)
select '1 ', 'A ' union all
select '1 ', 'B ' union all
select '2 ', 'A ' union all
select '2 ', 'B ' union all
select '3 ', 'C '

/* table2 */
create table #table2(dno varchar(4),p2 varchar(6))
insert into #table2(dno,p2)
select '1 ', 'A ' union all
select '1 ', 'C ' union all
select '2 ', 'C ' union all
select '4 ', 'A '

select ISNULL(a.dno,b.dno) as dno,
ISNULL(a.p1, 'NULL ') AS p1,
ISNULL(b.p2, 'NULL ') AS p2
from #table1 a
full join #table2 b
on a.dno = b.dno and a.p1 = b.p2
order by a.dno,a.p1

/* truncate and drop table */
truncate table #table1
truncate table #table2
drop table #table1
drop table #table2

/*
果:

dno p1 p2
---- ------ ------
1 A A
1 B NULL
1 NULL C
2 A NULL
2 B NULL
2 NULL C
3 C NULL
4 NULL A

(影 8 料列)

*/

读书人网 >SQL Server

热点推荐