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