我正在尝试确定查询表的逻辑/语法,并获取具有特定组负数的任何行。例如:
ID | Month | Amt Due
------ | ------ | ------
1 | Jan | 15
------ | ------ | ------
1 | Jan | -20
------ | ------ | ------
1 | Mar | 3
------ | ------ | ------
2 | Aug | 13
------ | ------ | ------
2 | Dec | 40
------ | ------ | ------
2 | Dec | -25
------ | ------ | ------
基本上,查询会看到有两个ID在同一个月内有多个ID:
然后它将取 amt due 列的总和:
由于我只想要否定结果,最终结果将是:
ID | Month | SUM(Amt Due)
------ | ------ | ------
1 | Jan | -5
------ | ------ | ------
这用于识别任何一个月都有负数的ID,因为系统永远不会产生负的amt_due总和。
答案 0 :(得分:4)
group by
条件下使用having
。
select id,month,sum(amt_due)
from tablename
group by id,month
having sum(amt_due) < 0
如果此检查仅适用于行数超过1的组,请再添加一个条件and count(*) > 1
。查询将是
select id,month,sum(amt_due)
from tablename
group by id,month
having sum(amt_due) < 0 and count(*) > 1
编辑:根据OP的评论,查询应为
select tb1.acct_num, tb2,inv_id, tb3.acctinv_id, to_char(tb3.frm_dt, 'MON'), sum(tb3.amt_due), tb3.type_id
from table1 tb1
join table2 tb2 on tb1.inv_id = tb2.inv_id
join table3 tb3 on tb2.acctinv_id = tb3.acctinv_id
where tb3.type_id = 10
group by tb1.acct_num, tb2,inv_id, tb3.acctinv_id, to_char(tb3.frm_dt, 'MON'), tb3.type_id
having sum(tb3.amt_due) < 0
我不确定您是否需要所有这些列进行分组。您收到错误,因为所选的所有非聚合列都未包含在group by
。