2017-11-01 2 views
1

Hier möchte ich am Ende zeigen für im.eindex zählen. SO, dafür benutze ich union all dafür aber das Ergebnis zeigt wie es insgesamt pro Datensatz ist.Union in wählen

select 
      '' Field1, 
       '' Field2, 
       'Comp' GField1, 
       ltrim(rtrim(cm.CName)) CName, 
       count(im.eindex) Emp 
     From Log l, 
       IMaster im, 
       cmaste cm 
     where cm.cindex=im.cindex 
       and im.iindex=sms.iindex 
       and im.Month = 10 
       and im.year = 2017 
       and cm.type 
       group by cm.CName 

    union all 

      select 
      '' Field1, 
       '' Field2, 
       'Comp' GField1, 
       ‘total’ CName, 
       sum(im.eindex) Emp 
       From Log l, 
       IMaster im, 
       cmaste cm 
     where cm.cindex=im.cindex 
       and im.iindex=sms.iindex 
       and im.Month = 10 
       and im.year = 2017 
       and cm.type 
       group by cm.CName 

Ausgabe von oben Abfrage ist

Field1 Field2 GField1 CName Employees 
         ABC COM 91 
         XYZ COMP 15 
         Total 7759562 
         Total 21211214 
+1

Es ist wie XYProblem aussieht. Veröffentlichen Sie Ihre echten Daten + gewünschte Ausgabe. Es sieht so aus, als ob Sie einen Bericht erstellen möchten, deshalb fügen Sie Zeilen mit Aggregation hinzu. Ich würde vorschlagen, 'GROUP BY GROUPING SETS()' mit der richtigen Agg-Funktion zu verwenden. – lad2025

Antwort

0

die letzte group by Anweisung entfernen, da wir die Summe aller CName zeigen wollen:

select 
      '' Field1, 
       '' Field2, 
       'Comp' GField1, 
       ltrim(rtrim(cm.CName)) CName, 
       count(im.eindex) Emp 
     From Log l, 
       IMaster im, 
       cmaste cm 
     where cm.cindex=im.cindex 
       and im.iindex=sms.iindex 
       and im.Month = 10 
       and im.year = 2017 
       and cm.type 
       group by cm.CName 

    union all 

      select 
      '' Field1, 
       '' Field2, 
       'Comp' GField1, 
       ‘total’ CName, 
       count(im.eindex) Emp 
       From Log l, 
       IMaster im, 
       cmaste cm 
     where cm.cindex=im.cindex 
       and im.iindex=sms.iindex 
       and im.Month = 10 
       and im.year = 2017 
       and cm.type 

Nachdem die group by in der zweiten SELECT Mittel wir zeigen wieder die SUM pro cm.Cname.

Sie können dies sogar vereinfachen:

select 
    '' Field1, 
     '' Field2, 
     'Comp' GField1, 
     ISNULL(ltrim(rtrim(cm.CName)), 'Total') CName, 
     count(im.eindex) Emp 
From Log l, 
     IMaster im, 
     cmaste cm 
where cm.cindex=im.cindex 
     and im.iindex=sms.iindex 
     and im.Month = 10 
     and im.year = 2017 
     and cm.type 
     group by GROUPING SETS 
     (
      (cm.CName) 
      ,() 
     )