日期:2014-05-18  浏览次数:20531 次

合并子表的问题——在线等。
大家好,我今天遇到一个难题:

三张表,TABLE1、TABLE2和TABLE3,关系是TABLE1是2和3的父表,关联字段1表为GUID,2和3为PERSONID,2表和3表里的记录会出现多条。现在需要生成一个合并表,如下:


TABLE1
GUID NAME
100 张三
101 李四
102 王五

TABLE2
PERSONID CASEA
100 北京
100 天津
101 湖南
101 海南
102 上海
102 云南

TABLE3
PERSONID CASEB
100 500
101 600
101 700
102 800
102 900
102 1000

结果表一:
GUID NAME CASEA CASEB
100 张三 北京 500
100 张三 天津
101 李四 湖南 600
101 李四 海南 700
102 王五 上海 800
102 王五 云南 900
102 王五 1000

结果表二:
GUID NAME NEWID CASEA
100 张三 1 北京
100 张三 2 天津
101 李四 1 湖南
101 李四 2 海南
102 王五 1 上海
102 王五 2 云南

大约就是一对二个多的关系,生成的结果表按记录多的子表来,少的顺序排在上面。跪求高手帮助!

------解决方案--------------------
SQL code

--结果表二
select a.*,row_number() over(partition by b.CASEA order by b.CASEA) NEWID,IsNull(b. CASEA,'') CASEA
from TABLE1 a 
join TABLE2 b on a.GUID=b.PERSONID
order by a.GUID

------解决方案--------------------
探讨
SQL code


---结果表一
select a.*,IsNull(b. CASEA,'') CASEA,IsNull(c.CASEB ,'')CASEB
from TABLE1 a
join TABLE1 b on a.GUID=b.PERSONID
join TABLE3 c on a.GUID=c.PERSONID
order by a.GUID

------解决方案--------------------
SQL code

--结果表1
SELECT a.*,IsNull(b.CASEA,'') CASEA,IsNull(c.CASEB ,'')CASEB 
FROM TABLE1 a 

LEFT JOIN TABLE2 b 
ON a.GUID=b.PERSONID 

LEFT JOIN TABLE3 c 
ON a.GUID=c.PERSONID 

ORDER BY a.GUID

--结果表2
SELECT a.*,row_number() over (partition by A.GUID,A.NAME,B.CASEA order by A.GUID) as NEWID,IsNull(b.CASEA,'') AS CASEA,
FROM TABLE1 a 

LEFT JOIN TABLE2 b 
ON a.GUID=b.PERSONID 
ORDER BY a.GUID