2

我有一个查询,最终看起来像这样:

DECLARE @Rank TABLE
(
     Team VARCHAR(3),
     StatCount TINYINT,
     TeamRank TINYINT
)
INSERT INTO @Rank VALUES ('AAA', 10, 5)
INSERT INTO @Rank VALUES ('AAA', 7, 4)
INSERT INTO @Rank VALUES ('AAA', 6, 3)
INSERT INTO @Rank VALUES ('AAA', 4, 2)
INSERT INTO @Rank VALUES ('AAA', 2, 1)

SELECT * From @Rank ORDER BY TeamRank DESC

现在我的要求是标记最高排名,以便前端可以突出显示该记录。我对其他想法持开放态度,但一开始就尝试了这个,但它的表现并不像预期的那样。因此,如果您能指出我做错了什么或提到另一种方式,我将不胜感激。

SELECT 
    Team,
    StatCount,
    TeamRank,
    (
        CASE 
            WHEN MAX(StatCount) = StatCount
                THEN 'True'
            ELSE
                'False'
            END
    ) AS 'HighScore'
FROM Rank
ORDER BY Team DESC;

谢谢你

我的错!

DDL 每个条目都有“AAA”,但它们是不同的。应该是“AAA”、“BBB”、“CCC”等。

谢谢大家的回答。我再次为糟糕的 DDL 数据道歉。

4

3 回答 3

2

尝试

SELECT 
    Team,
    StatCount,
    TeamRank,
    (
        CASE 
            WHEN StatCount = (select max(StatCount) from @Rank)
                THEN 'True'
            ELSE
                'False'
            END
    ) AS 'HighScore'
FROM @Rank
ORDER BY Team DESC
于 2013-07-23T13:42:36.613 回答
2

Max这是使用with的一种方法Partition By(假设您使用的是 SQL 2005 或更高版本):

SELECT 
    Team,
    StatCount,
    TeamRank,
    CASE 
        WHEN MAX(StatCount) OVER (PARTITION BY Team) = StatCount
            THEN 'True'
        ELSE
            'False'
    END
    AS 'HighScore'
FROM @Rank
ORDER BY Team DESC;
于 2013-07-23T13:43:36.230 回答
2

关于什么:

SELECT 
    r.*, isnull(v.b, 0) HighScore
From 
    @Rank r
    left join (select max(StatCount) m, 1 b from @Rank) v on r.StatCount = v.m
ORDER BY TeamRank DESC    
于 2013-07-23T13:47:50.873 回答