Sql 在oracle中一次进行多个选择
我想在选择性能时一步一个脚印地回到桌子上。 我可以在单个查询中计算已完成金额和待处理金额吗? 我简化了查询,因此无法添加主查询,这会降低性能Sql 在oracle中一次进行多个选择,sql,oracle,Sql,Oracle,我想在选择性能时一步一个脚印地回到桌子上。 我可以在单个查询中计算已完成金额和待处理金额吗? 我简化了查询,因此无法添加主查询,这会降低性能 SELECT D.COLUMN5, D.COLUMN2, (SELECT SUM(J.AMOUNT) FROM EFT_TABLE J WHERE J.COLUMN1 = D.COLUMN1 AND J.COLUMN2 = D
SELECT D.COLUMN5,
D.COLUMN2,
(SELECT SUM(J.AMOUNT)
FROM EFT_TABLE J
WHERE J.COLUMN1 = D.COLUMN1
AND J.COLUMN2 = D.COLUMN2
AND J.COLUMN3 = D.COLUMN3
AND J.COLUMN4 = 'N'
AND J.COLUMN5 = D.COLUMN5
AND J.COLUMN6 = 'CL'
AND J.COLUMN7 ='B' )AS COMPLETED_AMOUNT,
(SELECT SUM(J.AMOUNT)
FROM EFT_TABLE J
WHERE J.COLUMN1 = D.COLUMN1
AND J.COLUMN2 = D.COLUMN2
AND J.COLUMN4 = 'N'
AND J.COLUMN5 = D.COLUMN5
AND J.COLUMN3 = D.COLUMN3
AND J.COLUMN6 = 'WC'
AND J.COLUMN7 = ('B') )AS PENDING_AMOUNT
FROM EFT_TABLE D
WHERE D.COLUMN7 = 'A'
AND D.COLUMN3 >= trunc(sysdate-1)
AND D.COLUMN3 <= trunc(sysdate)
您可以一次离开联接表并根据第6列求和金额。试试这个。 但这取决于第5列和第2列的唯一性。 没有足够的数据来提供准确的答案
SELECT D.COLUMN5, D.COLUMN2,
SUM(DECODE(J.COLUMN6, 'CL', J.AMOUNT, 0)) COMPLETED_AMOUNT,
SUM(DECODE(J.COLUMN6, 'WC', J.AMOUNT, 0)) PENDING_AMOUNT
FROM EFT_TABLE D
LEFT JOIN EFT_TABLE J ON (D.COLUMN1 = J.COLUMN1 AND
D.COLUMN2 = J.COLUMN2 AND
D.COLUMN3 = J.COLUMN3 AND
J.COLUMN4 = 'N' AND
D.COLUMN5 = J.COLUMN5 AND
J.COLUMN7 = 'B')
WHERE D.COLUMN7 = 'A'
AND D.COLUMN3 >= trunc(sysdate-1)
AND D.COLUMN3 <= trunc(sysdate)
GROUP BY D.COLUMN5, D.COLUMN2
有条件地聚合,即在总和内时的用例: 改为从子查询切换到左联接。使用用例表达式进行条件聚合。
select
d.column5,
d.column2,
j.completed,
j.pending
from eft_table d
left join
(
select
column1, column2, column3, column5,
sum(case when column6 = 'CL' then amount end) as completed,
sum(case when column6 = 'WC' then amount end) as pending
from eft_table
where column4 = 'N'
and column7 = 'B'
group by column1, column2, column3, column5
) j on j.column1 = d.column1
and j.column2 = d.column2
and j.column3 = d.column3
and j.column5 = d.column5
where d.column7 = 'A'
and d.column3 between trunc(sysdate) - 1 and trunc(sysdate)
order by d.column5, d.column2;