来自基于列的查询的条件结果

时间:2012-02-20 21:47:57

标签: 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

逻辑是当Number和Name相同时,带有Flag的行。

2 个答案:

答案 0 :(得分:2)

最简单的方法,但如果有多个非NULL值,我不知道是否符合您的要求。

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

答案 1 :(得分:0)

也许是这样的:

首先是一些测试数据:

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