Sql 基于列的查询的条件结果

Sql 基于列的查询的条件结果,sql,sql-server-2008,Sql,Sql Server 2008,我正在处理简单的查询,但不知道如何修改以生成以下输出 Number Name Flag 1 ABC NULL 1 DEF FG 1 DEF NULL 我需要生成以下输出: Number Name Flag 1 ABC NULL 1 DEF FG 逻辑是当数字和名称相同时,使用带有标志的行。最简单的方法,但如果有多个非空值,我不知道这是否满足您的要求 SELECT Number, Name, Fl

我正在处理简单的查询,但不知道如何修改以生成以下输出

  Number Name Flag
  1      ABC   NULL
  1      DEF   FG
  1      DEF   NULL
我需要生成以下输出:

  Number Name Flag
  1      ABC   NULL
  1      DEF   FG

逻辑是当数字和名称相同时,使用带有标志的行。

最简单的方法,但如果有多个非空值,我不知道这是否满足您的要求

SELECT Number, Name, Flag = MAX(Flag)
  FROM dbo.Table
  GROUP BY Number, Name;

也许是这样的:

;WITH CTE AS
(
    SELECT
        RANK() OVER(PARTITION BY Name ORDER BY Flag DESC) AS iRank,
        tbl.Number,
        tbl.Name,
        tbl.Flag
    FROM
        @tbl AS tbl
)
SELECT
    *
FROM
    CTE
WHERE
    CTE.iRank=1
首先是一些测试数据:

DECLARE @tbl TABLE(Number INT,Name VARCHAR(10),Flag VARCHAR(3))

INSERT INTO @tbl
VALUES
    (1,'ABC',NULL),
    (1,'DEF','FG'),
    (1,'DEF',NULL)
查询结果如下所示:

;WITH CTE AS
(
    SELECT
        RANK() OVER(PARTITION BY Name ORDER BY Flag DESC) AS iRank,
        tbl.Number,
        tbl.Name,
        tbl.Flag
    FROM
        @tbl AS tbl
)
SELECT
    *
FROM
    CTE
WHERE
    CTE.iRank=1

如果您有另一行包含
1 DEF GH
,会发生什么情况?太好了!!!这对我正在寻找的场景效果最好。。谢谢很乐意帮忙。。快乐编码:P