СУММА ОТЛИЧИЯ в Microsoft Query - PullRequest
0 голосов
/ 03 июня 2019

У меня есть запрос, который возвращает данные примерно так:

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

Для этого сначала я добавляю DISTINCT (GROUP 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.

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Кажется очевидным, но разве это не сработает (пересмотрено)?

 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:

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
1 голос
/ 03 июня 2019

Правка - это сработавшее решение:

Эта проблема, похоже, связана с автоматически генерируемыми именами столбцов, которые в конечном итоге слишком длинные для оракула.Чтобы избежать этой проблемы, запрос может явно указать имена столбцов 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);
...