日期:2014-05-19  浏览次数:20472 次

请高人牛人帮忙 !谢谢
表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