2016-11-28 5 views
1

У меня есть следующий запрос ...Втягивание второе значение для кросс-таб с MySQL

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; 

Единственная проблема заключается в поле «Отдел», что я делаю счетчик на не всегда есть введенное значение (по разным причинам). Существует другое поле 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 

Любая помощь будет высоко ценится.

Спасибо.

+0

ли на самом деле существует Департамент 0? Что будет в разделе «Survey.Department» и 'Department.DeptID» в случаях, когда значение Департамента не введено? Это просто нулевое значение? – CGritton

+0

Если они не заполняют результат для Survey.Department, это приведет к недопустимому значению 0. Employee.DepartmentId следует использовать в этом случае и содержать предполагаемый правильный код отдела (ненулевой). –

ответ

0

Кажется, что я пытался сделать это слишком сложным.

Все, что мне нужно было сделать, это назвать результат, созданный условным оператором. Тогда я могу группироваться по этому значению ... и он работает (или кажется).

Вот мой полученный запрос:

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; 
1

Что произойдет, если вы попробуете это? Соединяя левое соединение, мы получаем все записи от Survey и любые соответствующие записи от Department. Тогда мы можем их заполнить.

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; 

Кстати, group by автоматически заказы, так что если вы группируя вам не нужно order by.

+0

Но coalesce (Survey.Department, 0) не устраняет проблему получения 0 значений, когда Департамент не заполняется ... это, по сути, моя проблема. Я хочу вытащить из Employee.DeptartmentId, если Survey.Department 0 или пустое и использовать его в моем счете/группе. –

+0

Я обновил свой ответ. Я думаю, вам нужно левое соединение. – CGritton

+0

Я попробовал ваш ответ ... и получил те же результаты, что и мои оригиналы ... так что это не помогло решить проблему (избавиться от первой строки с 0 для кода DepartmentID) –

0

Попробуйте

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; 
+0

Это устранило значения 0 ... так что это половина пути туда, куда я хочу пойти ... но он просто не учитывал значения 0, а не присваивал их отделам, которые сотрудник имел в своей исходной таблице (Employee.DepartmentId). .. который я хотел бы использовать * если * они не заполняются (Survey.Department). –

+0

Я знаю, что мне нужно добавить еще одно соединение, чтобы привести значения Employee.DepartmentID ... Я думаю, что если я смогу создать таблицу в памяти, тогда я могу динамически присвоить значение Департамента с помощью IF (Survey.Department> 0 , Survey.Department, Employee.DepartmentId) ... Я просто не знаю, как это сделать, если я группирую и подсчитываю на основе итогового значения. –

 Смежные вопросы

  • Нет связанных вопросов^_^