- 爱易网页
-
MSSQL教程
- 请高人牛人帮忙 !多谢
日期:2014-05-19 浏览次数:20516 次
请高人牛人帮忙 !谢谢
表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
1 A A
1 B NULL
1 NULL C
2 A NULL
2 B NULL
2 NULL C
3 C NULL
4 NULL A
*/
------解决方案--------------------
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