我有一个返回的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 :(得分:1)
只需在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
表达式(我也开始使用表别名来使事情变得更容易和更易读):
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 :(得分: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
答案 2 :(得分: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