Microsoft SQL计数问题
嘿,聪明人。下面的SQL语句有问题。我知道我不能在OnlineStatus列上进行分组,这是有意义的,因为这是一个函数调用,而不是表中的实际列。我应该如何修改它,以便我可以得到多少用户在线计数Microsoft SQL计数问题,sql,sql-server,count,Sql,Sql Server,Count,嘿,聪明人。下面的SQL语句有问题。我知道我不能在OnlineStatus列上进行分组,这是有意义的,因为这是一个函数调用,而不是表中的实际列。我应该如何修改它,以便我可以得到多少用户在线计数 SELECT CASE dbo.fnGetWebUserOnlineStatus(W.Id) WHEN 1 THEN 'Online' WHEN 2 THEN 'Ingame' ELSE 'Offline' END AS OnlineS
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
如果使用内部选择,则该选项应能正常工作:
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
) AS T1
GROUP BY OnlineStatus
您还可以在时将案例移动到计数 伪代码:
SELECT
COUNT(CASE dbo.fnGetWebUserOnlineStatus(W.Id) WHEN 1 THEN 1 ELSE NULL END) as OnlineCount,
COUNT(CASE dbo.fnGetWebUserOnlineStatus(W.Id) WHEN 2 THEN 1 ELSE NULL END) as IngameCount ...
FROM dbo.WebUsers W
WHERE W.[Status]=1
好吧,马特,给安多马尔他的“答案”,然后…(即使他真的不需要它,有那么多的要点:)