如何根据条件合并select语句中的行

时间:2013-11-20 22:31:41

标签: sql-server

对于模糊的描述感到抱歉,但我不知道该怎么说。

以下是SELECT语句的示例结果:

Number      Type      Name
67          NULL      George
67          Boy       Kevin

我想要的是什么:

Number      Type      Name
67          Boy       George

换句话说,如果Type为null,我想选择Name,但从另一行中选择Type。

希望这是有道理的。

编辑:我在评论中被要求提供更多信息。上面的结果是来自更大和更复杂查询的结果的简化版本。这是要匹配的查询的简化版本。另外,我不是要求代码。如果我能得到指向解决方案的指针,我可以自己弄清楚代码。我只是不确定我在寻找哪些关键字。感谢。

SELECT DISTINCT Number, [Type], Name
FROM         MyTable 
WHERE     Number = 67
GROUP BY Number, [Type], Name

2 个答案:

答案 0 :(得分:1)

如果每个Number只有一个可能的非null Type值,则可以执行

SELECT 
    Number,
    ISNULL( Type, 
       (SELECT TOP 1 Type FROM Table T1 WHERE T1.Number = T.Number) ) as Type,
    Name
FROM 
    Table T

答案 1 :(得分:1)

如果你不关心返回了哪个记录,如果有多个非NULL,你可以使用GROUP BY

DECLARE @Tbl TABLE (ID INT, A VARCHAR(10), B VARCHAR(10))
INSERT INTO @Tbl (ID, A, B) VALUES
    (1, 'Alice', NULL),
    (1, NULL, 'Smith')

SELECT
    ID, MIN(A), MIN(B)
FROM
    @Tbl
GROUP BY
    ID

输出:

1  Alice  Smith