カウントに関するSQLステートメントの問題

sql
カウントに関するSQLステートメントの問題

次を返すSQLステートメントがあります。

AUFTRNR     MITARBNAME      GESAMTDIFFERENZ
  2           Schmidt               5
  2           Schmidt             -20
  2           Schmidt               0
  2           Schmidt              -5
  2           Schmidt               5

しかし私は必要です:

AUFTRNR    MITARBNAME      GESAMTDIFFERENZ
   2         Schmidt              -20

つまり:「GESAMTDIFFERENZ」(5 + -20 + -5 + 0 + -5 + 5)の値をカウントするものが必要です

私のコード:

select arbeitsauftrag.AUFTRNR, mitarbeiter.MITARBNAME, (arbeitszeit.ISTZEIT-arbeitsgang.SOLLZEIT) Gesamtdifferenz from ARBEITSAUFTRAG,MITARBEITER,ARBEITSGANG,ARBEITSZEIT where
arbeitsauftrag.FERTIGDATUM IS NOT NULL and arbeitsauftrag.MITARBNR=mitarbeiter.MITARBNR
and ARBEITSGANG.TEILNR=ARBEITSAUFTRAG.TEILNR
and ARBEITSGANG.AGNR=ARBEITSZEIT.AGNR
and ARBEITSZEIT.AUFTRNR=ARBEITSAUFTRAG.AUFTRNR

  0  0


ベストアンサー

SQLに「GROUP BY MITARBNAME」を追加するだけです:

select
     arbeitsauftrag.AUFTRNR, mitarbeiter.MITARBNAME,
     SUM(arbeitszeit.ISTZEIT-arbeitsgang.SOLLZEIT) Gesamtdifferenz
from ARBEITSAUFTRAG, MITARBEITER, ARBEITSGANG, ARBEITSZEIT
where
   arbeitsauftrag.FERTIGDATUM IS NOT NULL
   and arbeitsauftrag.MITARBNR=mitarbeiter.MITARBNR
   and ARBEITSGANG.TEILNR=ARBEITSAUFTRAG.TEILNR
   and ARBEITSGANG.AGNR=ARBEITSZEIT.AGNR
   and ARBEITSZEIT.AUFTRNR=ARBEITSAUFTRAG.AUFTRNR
GROUP BY
   mitarbeiter.MITARBNAME

また、不要な/予期しないデカルト積を避けるために、古いスタイルのJOIN構文から離れることを強くお勧めします-代わりに、明示的なANSIスタイルの「INNER JOIN」式を使用します(そして、_table aliases_も使用し始めます)物事をより簡単で読みやすくする):

FROM
    ARBEITSAUFTRAG aa
INNER JOIN
    MITARBEITER m ON aa.MITARBNR = m.MITARBNR
INNER JOIN
    ARBEITSGANG ag ON ag.TEILNR = aa.TEILNR
INNER JOIN
    ARBEITSZEIT az ON ag.AGNR = az.AGNR
                   AND az.AUFTRNR = aa.AUFTRNR
where
   arbeitsauftrag.FERTIGDATUM IS NOT NULL

また、WHERE句が読みやすくなります!

1


select arbeitsauftrag.AUFTRNR, mitarbeiter.MITARBNAME, SUM(arbeitszeit.ISTZEIT-arbeitsgang.SOLLZEIT) Gesamtdifferenz
from ARBEITSAUFTRAG,MITARBEITER,ARBEITSGANG,ARBEITSZEIT
where
   arbeitsauftrag.FERTIGDATUM IS NOT NULL and arbeitsauftrag.MITARBNR=mitarbeiter.MITARBNR
   and ARBEITSGANG.TEILNR=ARBEITSAUFTRAG.TEILNR
   and ARBEITSGANG.AGNR=ARBEITSZEIT.AGNR
   and ARBEITSZEIT.AUFTRNR=ARBEITSAUFTRAG.AUFTRNR
GROUP BY arbeitsauftrag.AUFTRNR, mitarbeiter.MITARBNAME

1


何かのようなもの

select arbeitsauftrag.AUFTRNR, mitarbeiter.MITARBNAME, sum(arbeitszeit.ISTZEIT-arbeitsgang.SOLLZEIT) Gesamtdifferenz from ARBEITSAUFTRAG,MITARBEITER,ARBEITSGANG,ARBEITSZEIT where
arbeitsauftrag.FERTIGDATUM IS NOT NULL and arbeitsauftrag.MITARBNR=mitarbeiter.MITARBNR
and ARBEITSGANG.TEILNR=ARBEITSAUFTRAG.TEILNR
and ARBEITSGANG.AGNR=ARBEITSZEIT.AGNR
and ARBEITSZEIT.AUFTRNR=ARBEITSAUFTRAG.AUFTRNR
group by arbeitsauftrag.AUFTRNR, mitarbeiter.MITARBNAME

?

1


タイトルとURLをコピーしました