2017-02-28 2 views
0

In SQL habe ich eine Abfrage, die verwendet wird, um Art von Fehler von einem Mitarbeiter zu finden gibt. Es gibt 3 Arten von Fehlern, die ein Mitarbeiter machen kann - finanzielle, administrative und FYI errors.I haben Gruppe von Klausel mit MitarbeiterID und Fehlertyp verwendet, aber ich will Gruppe von nur mit MitarbeiterID, aber in diesem Fall wird Fehler ausgelöst, dass Sie Fehler Typ in Gruppe enthalten müssen, weil es in Auswahlliste enthalten ist.Zusammenführen von Zeilen von Gruppe nach Klausel in einzelne Zeile gemäß Bedingung

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 Ergebnis bin immer wie folgt festgelegt:

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 

aber ich möchte einzelne Zeile für jeden Mitarbeiter, die jede Art von Fehler durch him.how gemacht geben kann ich diese bekommen?

+1

MySQL oder SQL Server? Wähle bitte einen aus. – DavidG

+0

Ihre Frage ist nicht sehr sinnvoll. Und es sieht so aus, als würde dies die von Ihnen gesuchte Ausgabe liefern. Hier ist ein großartiger Ort, um diese Frage zu verbessern. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

Antwort

0

Sie müssen die Reihenfolge der Fall und die Summe, zurückzukehren und die Gruppe von c_errtype entfernen:

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

Wieder bekomme ich den Fehler. Die Spalte 'EL_Error_Mst.c_errtype' ist in der Auswahlliste ungültig, weil sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist. –

1

Ich denke, Ihre Fehler verursacht wird, durch, wie Sie versuchen, Ihre Bedingungen zu summieren. Wie wäre es damit?

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

Immer noch bekomme ich den gleichen Fehler –

+0

Es hat funktioniert.Vielen Dank Kumpel –

Verwandte Themen