首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >case语句中的计数SQL

case语句中的计数SQL
EN

Stack Overflow用户
提问于 2016-08-01 17:32:49
回答 3查看 8.8K关注 0票数 0

我在我的sql程序中有以下查询

代码语言:javascript
运行
复制
SELECT
    m.managerid,
    CASE
        WHEN (ISNULL(COUNT(t.employeeid), 0) = 0) THEN 'No Manager'
        ELSE COUNT(m.managerid)
    END
FROM employee t
LEFT JOIN employenrol m
    ON t.employeeid = m.employeeid
GROUP BY t.employeeid

if count(t.employeeid)= 0,我需要显示,没有管理器,,否则,实际计数。

将varchar值“No Manager”转换为数据类型int时,转换失败。警告: Null值由聚合操作或其他设置操作消除。

怎么解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-01 17:36:49

来自MSDN

else_result_expression和任何result_expression的数据类型必须相同或必须是隐式转换。

您需要在else部件中进行显式转换,因为第一个then语句返回不能转换为INTVARCHAR

代码语言:javascript
运行
复制
SELECT t.employeeid, 
       CASE 
         WHEN Count(m.employeeid) = 0 THEN 'No Manager' 
         ELSE Cast(Count(m.employeeid) AS VARCHAR(50)) 
       END 
FROM   employee t 
       LEFT JOIN employenrol m 
              ON t.employeeid = m.employeeid 
GROUP  BY t.employeeid 

此外,Count聚合在有NULL时返回NULL。不需要使用ISNULL函数

票数 2
EN

Stack Overflow用户

发布于 2016-08-01 17:36:37

这个怎么样?

代码语言:javascript
运行
复制
Select m.managerid,
    Case When count(t.employeeid) =0 Then 'No Manager' Else count(m.managerid) end  
From 
    employee t Left Join employenrol m On t.employeeid=m.employeeid 
Group By t.employeeid
票数 0
EN

Stack Overflow用户

发布于 2016-08-01 17:47:12

我想这就是你想要做的..。

代码语言:javascript
运行
复制
SELECT  t.employeeid,
        CASE WHEN COUNT(m.managerid) = 0 THEN 'No Manager'
             ELSE CAST(COUNT(m.managerid) AS VARCHAR(10))
        END
FROM    employee t
        LEFT JOIN employenrol m ON t.employeeid = m.employeeid
GROUP BY t.employeeid

不确定为什么要选择m.managerid和计数t.employeeid,这会导致错误,因为您只按t.employeeid分组

这可能会对你更有帮助

代码语言:javascript
运行
复制
SELECT  t.employeeid,
        CASE WHEN m.managercount = '0' THEN 'No Manager'
             ELSE m.managercount
        END
FROM    @employee t
        OUTER APPLY (SELECT CAST(COUNT(managerid) AS VARCHAR(10)) managercount
                     FROM   @employenrol m
                     WHERE  t.employeeid = m.employeeid
                    ) m
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38704855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档