我有一个包含列的表:
EGAIT1 EGACAM EGVONO
2440 -18242,39 1416341
6995 18242,39 1416341
2995 18242,39 1416341
6995 -18242,39 1416341
2995 18242,39 1416341
2995 -18242,39 1416341
我希望查询查看包含帐户2995或6995的会计行是否将upp添加为零,如果不是,我希望问题返回不加零的帐户数和差值之和金额。
我的查询如下:
SELECT
MAX(FGLEDG.EGAIT1),
SUM(FGLEDG.EGACAM)
FROM SEUHABOB.MVXADTA001.FGLEDG FGLEDG
WHERE (FGLEDG.EGAIT1 IN ('2995','6995'))
AND (FGLEDG.EGVONO=1416341)
GROUP BY FGLEDG.EGVONO
HAVING SUM(FGLEDG.EGACAM) <> 0
问题在于,由于我被迫使用MAX(FGLEDG.EGAIT1)
,问题会重新调整错误的帐号。
是否有某种方法可以“拆分”WHERE条件,以便每个帐户执行一次,每次执行只执行returns MAX(FGLEDG.EGAIT1)
?
(我当时试图只使用一个帐户,然后它不返回6995,这是正确的,2995 18242,39返回2995,也是正确的。)
我的预期结果是:
EGAIT1 EGACAM
2440 -18242,39
6995 18242,39
答案 0 :(得分:0)
SELECT FGLEDG.EGAIT1, SUM(FGLEDG.EGACAM)
FROM SEUHABOB.MVXADTA001.FGLEDG FGLEDG
WHERE (FGLEDG.EGAIT1 IN ('2995','6995'))
GROUP BY FGLEDG.EGAIT1
HAVING SUM(FGLEDG.EGACAM) != 0
仅仅是问题是必须为EGAIT1进行分组,以便在没有MAX的情况下使用它。
(改变后的问题)
可能需要以下组合分组:
SELECT FGLEDG.EGVONO, FGLEDG.EGAIT1, SUM(FGLEDG.EGACAM)
FROM SEUHABOB.MVXADTA001.FGLEDG FGLEDG
WHERE FGLEDG.EGAIT1 IN ('2995','6995')
GROUP BY FGLEDG.EGVONO, FGLEDG.EGAIT1
HAVING SUM(FGLEDG.EGACAM) != 0
答案 1 :(得分:0)
假设您只对这两个帐户2995和6995感兴趣,您可以执行以下操作:
SELECT FGLEDG.EGAIT1, SUM(FGLEDG.EGACAM), FGLEDG.EGVONO
FROM SEUHABOB.MVXADTA001.FGLEDG FGLEDG
WHERE (FGLEDG.EGAIT1 in ('2995', '6995')
AND FGLEDG.EGVONO=1416341)
GROUP BY FGLEDG.EGVONO, FGLEDG.EGAIT1
HAVING SUM(FGLEDG.EGACAM) <> 0
答案 2 :(得分:0)
如果我理解正确,您只想在两个指定帐户不为零时输出数据。如果是这样,那么您可以使用窗口/分析函数来为这些&#34;帐户&#34;添加值。在子查询中:
SELECT EGVONO, EGAIT1, cnt, sum_EGACAM
FROM (SELECT EGVONO, EGAIT1, COUNT(*) as cnt, SUM(EGACAM) as sum_EGACAM,
SUM(SUM(CASE WHEN F.EGAIT1 IN ('2995', '6995') THEN EGACAM END)) OVER (PARTITION BY EGVONO) as sum_2995_6995
FROM SEUHABOB.MVXADTA001.FGLEDG F
GROUP BY FGLEDG.EGVONO, EGAIT1
) x
WHERE sum_2995_6995 = 0