В SQL у меня есть запрос, который используется, чтобы найти тип ошибки, допущенной сотрудником. Существует 3 типа ошибок, которые сотрудник может совершить: финансовые, административные и ошибки в вашем распоряжении. Я использовал групповое предложение с employeeid и типом ошибки, но Я хочу сгруппировать только с employeeid, но в этом случае выдается ошибка, что вы должны включить тип ошибки в группу, потому что он включен в список выбора.

select i_empid,
    COUNT(i_empid) as claims_audited,
    sum(i_errcount) as total_errors,
    case 
        when c_errtype = 'FINANCIAL'
            then SUM(i_errcount)
        else 0
        end as financial_errors,
    case 
        when c_errtype = 'ADMINISTRATIVE'
            then SUM(i_errcount)
        else 0
        end as administrative_errors,
    case 
        when c_errtype = 'FYI'
            then SUM(i_errcount)
        else 0
        end as FYI_errors
from EL_Error_Mst
group by i_empid,
    c_errtype

Я получаю набор результатов, как это:

i_empid claims_audited  total_errors    financial_errors    administrative_errors   FYI_errors  
13           1              1                  0                     1                0       
341          1               1                 0                     1                0   
665          2               2                 0                     2                0   
341          1               1                 1                     0                0

Но я хочу отдельную строку для каждого сотрудника, которая дает каждый тип ошибки, сделанной им. Как я могу получить это?

sql
0
priya thapliyal 28 Фев 2017 в 20:15

2 ответа

Лучший ответ

Вам нужно изменить порядок регистра и суммы и удалить группу с помощью c_errtype:

select i_empid, 
count(i_empid) as claims_audited
sum(case when c_errtype='FINANCIAL' then i_errcount else 0 end) as financial_errors,
sum(case when c_errtype='ADMINISTRATIVE' then i_errcount else 0 end) as administrative_errors,
sum(case when c_errtype='FYI' then i_errcount else 0 end) as fyi_errors
from EL_Error_Mst
group by i_empid
0
NotCaring 28 Фев 2017 в 17:29

Я думаю, что ваша ошибка вызвана тем, как вы пытаетесь суммировать свои условия. Как насчет этого?

select i_empid,
    count(i_empid) as claims_audited,
    sum(i_errcount) as total_errors,
    sum(case 
        when c_errtype = 'FINANCIAL'
            then i_errcount
        else 0
        end) as financial_errors,
    sum(case 
        when c_errtype = 'ADMINISTRATIVE'
            then i_errcount
        else 0
        end) as administrative_errors,
    sum(case 
        when c_errtype = 'FYI'
            then i_errcount
        else 0
        end) as FYI_errors
from EL_Error_Mst
group by i_empid
1
SqlZim 28 Фев 2017 в 17:23