Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在oracle中一次进行多个选择_Sql_Oracle - Fatal编程技术网

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;