为MySQL的交叉表引入第二个值

为MySQL的交叉表引入第二个值,mysql,conditional-operator,Mysql,Conditional Operator,我有以下疑问 SELECT COUNT(Department) as DeptCount, Survey.Department, Department.DepartmentName FROM Survey JOIN Department ON Survey.Department = Department.DeptID Where SurveyCompleted is not null GROUP BY DEPARTMENT ORDER BY Department; 唯一的问题是我计算的字段

我有以下疑问

SELECT COUNT(Department) as DeptCount, Survey.Department, Department.DepartmentName 
FROM Survey JOIN Department ON Survey.Department = Department.DeptID 
Where SurveyCompleted is not null GROUP BY DEPARTMENT ORDER BY Department;
唯一的问题是我计算的字段“Department”并不总是输入值(出于各种原因)。我可以使用另一个字段Employee.DepartmentId,但如果使用内联if或类似的构造,我不确定如何创建相同的效果

基本上,我希望看到的输出是:

DeptCount    Department    DepartmentName
43           2             Department1
68           9             Department2
83           13            Department3
现在我得到一个额外的行作为第一个结果

DeptCount    Department    DepartmentName
93           0             <blank>
43           2             Department1
68           9             Department2
83           13            Department3
DeptCount部门名称
93           0             
432部门1
68 9部门2
83 13部门3
任何帮助都将不胜感激


谢谢。

如果你试试这个会怎么样?通过将联接设为左联接,我们可以从
调查
获得所有记录,并从
部门
获得任何匹配的记录。然后我们可以把它们聚合起来

SELECT COUNT(Department) as DeptCount, coalesce(Survey.Department, 0)
, Department.DepartmentName 
FROM Survey 
left JOIN Department ON Survey.Department = Department.DeptID
Where SurveyCompleted is not null 
GROUP BY DEPARTMENT ORDER BY Department;
顺便说一下,
groupby
会自动排序,因此如果您正在分组,您不需要使用
orderby

试试这个

SELECT COUNT(Department) as DeptCount, Survey.Department, Department.DepartmentName 
FROM Survey JOIN Department ON Survey.Department = Department.DeptID 
Where SurveyCompleted is not null and Survey.Department is not null and Survey.Department <> ''   
GROUP BY DEPARTMENT   
ORDER BY Department;
选择计数(部门)作为DeptCount、Survey.Department、Department.DepartmentName
从调查加入调查部门。部门=部门。部门ID
其中SurveyCompleted不为空,Survey.Department不为空,Survey.Department“”
按部门分组
按部门排序;

我似乎想把它变得过于复杂

我所需要做的就是命名由条件运算符创建的结果。然后我可以根据这个值进行分组。。。而且它有效(或似乎有效)

以下是我的查询结果:

SELECT COUNT(Department) as DeptCount, 
  IF(Survey.Department=0, Employee.DepartmentId, Survey.Department) As MyDept, 
  Department.DepartmentName 
FROM Survey JOIN Department ON Survey.Department = Department.DeptID
  JOIN Employee ON EmployeeId = Employee.Id
WHERE SurveyCompleted is not null
GROUP BY MyDept;

实际上是否存在0的部门?在没有输入部门值的情况下,
Survey.Department
Department.DeptID
中会有什么内容?这只是一个空值吗?如果他们不填写调查结果,部门将得到一个无效的0值。在这种情况下应使用Employee.DepartmentId,并将包含假定正确的部门代码(非零)。但是合并(Survey.department,0)并不能消除在未填写部门时获取0值的问题。。。这基本上是我的问题。如果Survey.Department为0或为空,我想从Employee.DepartmentId中提取,并将其用于我的计数/分组。我尝试了您的答案。。。得到了和我原来一样的结果。。。所以它似乎没有解决问题(去掉第一行的部门ID代码为0),如果只运行
select*FROM Survey LEFT JOIN Department ON Survey.Department=Department.DeptID
,您会得到什么?我会为每个部门获得一条(伪随机)记录。。。34项记录。我有1443份调查记录和32份部门记录。。。我得到一条部门记录为空的记录,我必须查看另一条记录是什么(它不在部门表中)。这就消除了0值。。。所以这是我想去的地方的一半。。。但它只是忽略了0值,而没有将它们分配给员工在其原始表中拥有的部门(employee.DepartmentId)。。。如果他们不填写(Survey.Department),我会使用它。我知道我需要添加另一个联接以引入Employee.DepartmentID值。。。我在想,如果我可以在内存中创建一个表,那么我可以使用if(Survey.Department>0,Survey.Department,Employee.DepartmentId)动态地分配部门值。。。当我根据结果值分组和计数时,我不知道如何进行这种内联if。