我在我的sql程序中有以下查询
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.employeeidif count(t.employeeid)= 0,我需要显示,没有管理器,,否则,实际计数。
将varchar值“No Manager”转换为数据类型int时,转换失败。警告: Null值由聚合操作或其他设置操作消除。
怎么解决这个问题?
发布于 2016-08-01 17:36:49
来自MSDN
else_result_expression和任何result_expression的数据类型必须相同或必须是隐式转换。
您需要在else部件中进行显式转换,因为第一个then语句返回不能转换为INT的VARCHAR。
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函数
发布于 2016-08-01 17:36:37
这个怎么样?
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发布于 2016-08-01 17:47:12
我想这就是你想要做的..。
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分组
这可能会对你更有帮助
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
) mhttps://stackoverflow.com/questions/38704855
复制相似问题