Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2008 R2:从列中获取第一个非空值_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

SQL Server 2008 R2:从列中获取第一个非空值

SQL Server 2008 R2:从列中获取第一个非空值,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,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_p

我有以下表格来显示预期结果

表格

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
我的尝试

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
但得到的结果表明:

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

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

这是一个具有单个
连接的替代解决方案

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
选择CP.Child\u ID,
MAX(CP.Parent\u ID F.ID然后F.Name END时的情况)ChildName,
MAX(当CP.Parent\u ID=F.ID,F.Gender='M'然后F.Name END时的情况)FatherName,
MAX(CP.Parent_ID=F.ID,F.Gender='F'然后F.Name END时的情况)MotherName
从…起
子/父CP
在CP.Parent\u ID=F.ID或CP.Child\u ID=F.ID上左连接族F
分组
儿童身份证