如果返回不同,有人可以查看我的查询并提供帮助

时间:2017-09-28 04:49:52

标签: sql

如果返回不同,有人可以查看我的查询并提供帮助。我试图使用不同的值获取父表和子表中的所有值,并且可能没有链接和没有链接的记录

Create table Parent(Parentid VARCHAR(10), parentname varchar(15))

Insert into Parent 
values (1, 'parent'), (2, 'parent2'), (3, 'parent3')

create table child
(
     childid VARCHAR(10), 
     childname varchar(15),
     parentfatherid VARCHAR(10), 
     parentmotherid VARCHAR(10)
)

insert into child
values  (10, 'child1', 1, null),
        (20, 'child2', null, null),
        (30, 'child3', 2, null),
        (40, 'child4', 1, null),
        (50, 'child5', 2, null),
        (60, 'child6', null, 2),
        (70, 'child7', null, 3),
        (50, 'child8', null, 1),
        (60, 'child9', null, 2),
        (70, 'child10', null, 3),
        (80, 'child11', null, 1),
        (NULL, NULL, NULL, NULL)

;with cte as
(
    select 
        childid, childname, parentmotherid ,parentfatherid,
        ROW_NUMBER() over (partition by parentmotherid order by parentmotherid) as rownumber 
    from 
        child
) 
select 
    P.Parentid, p.parentname,
    c.childid, c.childname, c.parentfatherid, c.parentmotherid 
into 
    #tablea
from 
    cte C 
inner join 
    Parent P on c.parentmotherid = p.Parentid        
order by 
    C.rownumber


;with cte as
(
    select 
        childid, childname, parentmotherid ,parentfatherid,
        ROW_NUMBER() over (partition by parentfatherid order by parentfatherid) as rownumber 
    from 
        child
) 
select 
    P.Parentid, p.parentname,
    c.childid, c.childname, c.parentfatherid, c.parentmotherid 
into 
    #tableb
from 
    cte C 
inner join 
    Parent P on c.parentfatherid = p.Parentid                
order by 
    C.rownumber


SELECT    
    P.Parentid, p.parentname,
    A.childid, A.childname, A.parentfatherid, A.parentmotherid
INTO  
    #tableC
FROM
    child A, Parent p 
WHERE 
    (A.childid IS NULL OR A.childid = '') AND 
    (A.childname IS NULL OR A.childname = '') AND
    (A.parentfatherid IS NULL OR A.parentfatherid = '') AND
    (A.parentmotherid IS NULL OR A.parentmotherid = '')


;with cte3  as
(
    select * 
    from #tablea    
    union
    select * 
    from #tableb
    union 
    select * 
    from #tableC
)  
select  
    cte3.Parentid, cte3.parentname,
    cte3.childid, cte3.childname, cte3.parentfatherid, cte3.parentmotherid,
    ROW_NUMBER() over (partition by cte3.parentid,cte3.parentname order by cte3.parentid, cte3.parentname) as Finalrow
into 
    #Final
from 
    cte3

Update #Final
set PARENTID = '', parentname = ''
where Finalrow != 1


INSERT INTO #Final
    SELECT '', '', childid, childname, parentfatherid, parentmotherid, NULL 
    FROM child 
    WHERE childid IS NOT NULL
     AND childname IS NOT NULL
     AND parentfatherid IS NULL 
     AND parentmotherid IS NULL

0 个答案:

没有答案