我正在处理简单的查询,但无法弄清楚如何修改以生成以下输出。
Number Name Flag
1 ABC NULL
1 DEF FG
1 DEF NULL
我需要产生这个输出:
Number Name Flag
1 ABC NULL
1 DEF FG
逻辑是当Number和Name相同时,带有Flag的行。
答案 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