2017-12-04 15 views
2

次の表を参照して、予期した結果を表示します。SQL Server 2008 R2:列からヌル値を最初に取得します。

CREATE TABLE Family 
(
    ID int, 
    Name varchar(20), 
    Gender char(1) 
); 

INSERT INTO Family VALUES 
(1,'Ram','M'), 
(2,'Suraj','M'), 
(3,'Sunitha','F'), 
(4,'Deepika','F'), 
(5,'Minakshi','F'), 
(6,'Somu','M'); 

CREATE TABLE Child_parent 
(
    Child_ID int, 
    Parent_ID int 
); 

INSERT INTO Child_parent VALUES 
(1,2), 
(1,3), 
(4,5), 
(4,6); 

期待される結果

Child_ID ChildName FatherName MotherName 
----------------------------------------------- 
1   Ram   Suraj  Sunitha 
4   Deepika  Somu  Minakshi 

マイ試みる

SELECT cp.Child_ID, 
     f1.Name as ChildName, 
     CASE WHEN f2.Gender = 'M' THEN f2.Name END FatherName, 
     CASE WHEN f2.Gender = 'F' THEN f2.Name END MotherName 
FROM Child_parent cp 
LEFT JOIN Family f1 
ON cp.Child_ID = f1.ID 
LEFT JOIN Family f2 
ON cp.Parent_ID = f2.ID 

しかしなっRESU LTは示しています

Child_ID ChildName FatherName MotherName 
---------------------------------------------- 
1   Ram   Suraj  NULL 
1   Ram   NULL  Sunitha 
4   Deepika  NULL  Minakshi 
4   Deepika  Somu  NULL 

答えて

2

これは、単一のJOINと代替ソリューションであるこの

SELECT cp.Child_ID, 
     f1.Name as ChildName, 
     max(CASE WHEN f2.Gender = 'M' THEN f2.Name END) FatherName, 
     max(CASE WHEN f2.Gender = 'F' THEN f2.Name END) MotherName 
FROM Child_parent cp 
LEFT JOIN Family f1 
ON cp.Child_ID = f1.ID 
LEFT JOIN Family f2 
ON cp.Parent_ID = f2.ID 
group by cp.Child_ID, 
     f1.Name 
order by cp.Child_ID 
1

を試してみてください。

SELECT CP.Child_ID, 
    MAX(CASE WHEN CP.Parent_ID <> F.ID THEN F.Name END) ChildName, 
    MAX(CASE WHEN CP.Parent_ID = F.ID AND F.Gender ='M' THEN F.Name END) FatherName, 
    MAX(CASE WHEN CP.Parent_ID = F.ID AND F.Gender ='F' THEN F.Name END) MotherName 
FROM 
    Child_parent CP 
    LEFT JOIN Family F ON CP.Parent_ID = F.ID OR CP.Child_ID = F.ID 
GROUP BY 
    Child_ID 
関連する問題