2015-06-14 3 views
0

Я хочу получать данные в следующем формате из SQL SERVER 2000граф строк о состоянии в SQL SERVER 2000

Department | TotalPresent | Employee | Officer 
XYZ    12   6   6 

Я бегу этот запрос

SELECT  a.department, 
      Count(emp_id) AS totalpresent, 
      CASE 
         WHEN a.type = 'Employee' THEN Count(a.type) 
         ELSE 0 
      END AS employee, 
      CASE 
         WHEN a.type = 'Officer' THEN Count(a.type) 
         ELSE 0 
      END AS officer 
FROM  attendancelog m 
INNER JOIN employeedata a 
ON   m.emp_id = a.emp_id groupby a.type, 
      a.department 

, когда я запускаю это я запрашиваю получить этот вид данных, который является неправильным

Department | TotalPresent | Employee | Officer 
    XYZ    12   6   0 
    XYZ    12   0   6 

Пожалуйста, исправьте меня, что кажется проблемой, почему оно возвращает m е одни и те же записи в два раза, но выполняет условие

Все, что я хочу, чтобы это посчитать строки на условии, что тип является работником или должностным лицом

ответ

1

Удалите type из group by и переместить case внутри sum():

Select a.department, count(emp_id) as TotalPresent, 
     sum(case when a.Type = 'Employee' THEN 1 ELSE 0 END) as Employee, 
     sum(case when a.Type = 'Officer' THEN 1 ELSE 0 END) as Officer 
from AttendanceLog m INNER JOIN 
    EmployeeData a 
    ON m.emp_id = a.emp_id 
GroupBy a.Department; 

Также обновите свой SQL Server. SQL Server 2000 был не поддерживается в течение многих лет. Вы должны попытаться использовать поддерживаемое программное обеспечение.

+0

thanx a ton, сделал глупую ошибку. Ну, мы обновляемся с сервера sql 2000, на это уходит мало времени, зависящие от приложений –