Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft SQL计数问题_Sql_Sql Server_Count - Fatal编程技术网

Microsoft SQL计数问题

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

嘿,聪明人。下面的SQL语句有问题。我知道我不能在OnlineStatus列上进行分组,这是有意义的,因为这是一个函数调用,而不是表中的实际列。我应该如何修改它,以便我可以得到多少用户在线计数

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
好吧,马特,给安多马尔他的“答案”,然后…(即使他真的不需要它,有那么多的要点:)