嘿聪明人。我在使用以下 SQL 语句时遇到问题。我知道我不能对 OnlineStatus 列执行 GROUP BY,这是有道理的,因为它是一个函数调用,而不是我表中的实际列。我将如何修改它以便我可以计算有多少用户在线?

SELECT CASE dbo.fnGetWebUserOnlineStatus(W.Id)
        WHEN 1 THEN 'Online'
        WHEN 2 THEN 'Ingame'
        ELSE 'Offline'
       END AS OnlineStatus
FROM dbo.WebUsers W
WHERE W.[Status]=1
GROUP BY OnlineStatus

最佳答案

最好使用子查询来完成:

SELECT OnlineStatus, count(*)
FROM (
    SELECT  CASE dbo.fnGetWebUserOnlineStatus(W.Id)
        WHEN 1 THEN 'Online'
        WHEN 2 THEN 'Ingame'
        ELSE 'Offline'
         END AS OnlineStatus
    FROM dbo.WebUsers W
    WHERE W.[Status]=1
) sub
GROUP BY OnlineStatus

关于sql - Microsoft SQL 计数问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2602638/

10-12 01:52