0

我有一个查询,它返回的数据有点像这样:

REF01   10  50  1
REF01   10  50  1
REF01   20  40  1
REF01   20  40  1
REF01   30  30  2
REF02   40  20  1
REF02   50  10  2
REF02   50  10  2

我需要它像这样返回它:

REF01   60  120
REF02   90  30

为此,我首先添加一个DISTINCTGROUP BY所有列似乎也这样做)以删除返回它的重复项,如下所示:

REF01   10  50  1
REF01   20  40  1
REF01   30  30  2
REF02   40  20  1
REF02   50  10  2

然后我需要添加一个SUM()结果而不计算删除的重复结果。

我已经尝试过这样的解决方案,但是我得到了一个错误,FROM (SELECT ...)并且这个确实有效,除了子查询中的一列是操作(column_1-column_2-column_3)的结果,这会导致错误ORA-00972: identifier is too long超过 30 个字符的最大限制并尝试AS在子查询中应用别名(在WITH SUBQUERY AS ( ... )我尝试过的 MS Query 中不起作用。

对大多数 SQL 函数等的支持在 Microsoft Query 上并不是最好的。

4

2 回答 2

1

编辑 - 这是有效的解决方案:

这个问题似乎与自动生成的列名有关,最终对于 oracle 来说太长了。为避免此问题,查询可以显式命名 CTE 列,如下所示:

with
x (col1, col2, col3, col4) as ( -- columns are named here
  select distinct col1, col2, col3, col4 from t
)
select col1, sum(col2), sum(col3)
from x
group by col1

解决方案#2(在工具中不起作用)

如果您使用的工具不支持子查询,您仍然可以通过创建视图来欺骗它。例如:

create view view1 as select distinct col1, col2, col3, col4 from t

然后,只需运行一个使用它的查询:

select col1, sum(col2), sum(col3) from view1 group by col1

结果:

COL1   SUM(COL2)  SUM(COL3)
-----  ---------  ---------
REF02         90         30
REF01         60        120

解决方案#3(在该工具中也不起作用)

select col1, sum(col2), sum(col3) from (
  select distinct col1, col2, col3, col4 from t
) x
group by col1

用于测试的数据:

作为参考,我使用的数据脚本是:

create table t (
  col1 varchar2(10),
  col2 number(6),
  col3 number(6),
  col4 number(6)
);

insert into t (col1, col2, col3, col4) values ('REF01', 10, 50, 1);
insert into t (col1, col2, col3, col4) values ('REF01', 10, 50, 1);
insert into t (col1, col2, col3, col4) values ('REF01', 20, 40, 1);
insert into t (col1, col2, col3, col4) values ('REF01', 20, 40, 1);
insert into t (col1, col2, col3, col4) values ('REF01', 30, 30, 1);
insert into t (col1, col2, col3, col4) values ('REF02', 40, 20, 1);
insert into t (col1, col2, col3, col4) values ('REF02', 50, 10, 1);
insert into t (col1, col2, col3, col4) values ('REF02', 50, 10, 1);
于 2019-06-03T14:23:26.190 回答
1

似乎很明显,但这不起作用(修订)?

 select col1, sum(col2) as col2, sum(col3)  as col3 from 
(Select col1, col2, sum(DISTINCT col3) as col3 from t
group by col1, col2) aa
group by col1

或与:

WITH tt as (Select col1, col2, sum(DISTINCT col3) as col3 from t
group by col1, col2) 

select col1, sum(col2) as col2, sum(col3)  as col3 from tt
group by col1
于 2019-06-03T14:34:28.217 回答