Сумма аналитическая функция или любой другой простой способ - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть данные ниже и нужно выбрать все столбцы с суммой в один столбец

 id size desc1, desc2
 1   13   xxx   yyy
 1   13   xxx   yyy
 1   10   mmm   kkk
 1   10   mmm   kkk

мне нужно ниже вывода

 id  **total_size** desc1 des2
 1    23         xxx   yyy
 1    23         xxx   yyy
 1    23         mmm   kkk
 1    23         mmm   kkk

total_size должно быть суммой (различный размер)

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Вам просто нужно добавить sum(distinct "size") over (partition by id) для вычисления total_size столбца для каждой строки в вашем SQL:

with tab(id,"size","desc1","desc2") as
(
 select 1 ,13,'xxx','yyy' from dual union all
 select 1 ,13,'xxx','yyy' from dual union all
 select 1 ,10,'mmm','kkk' from dual union all  
 select 1 ,10,'mmm','kkk' from dual
)
select t.id, 
       sum(distinct t."size") over (partition by id) as "total_size",
       t."desc1",t."desc2"
  from tab t;

P.S. size является зарезервированным ключевым словом , , поэтому , нельзя использовать в качестве имени столбца, если не указано в кавычках. как "size"

0 голосов
/ 08 сентября 2018
select a.id
    ,a.size
    ,sum(b.size) as 'total_size'
    ,a.desc1
    ,a.desc2
from (
        select *, row_number() over (order by id, size, desc1, desc2) as 'RowNumber'
        from #tmp
      ) a
    left join (
                select *, row_number() over(partition by id, size order by id) as 'dupe'
                from #tmp
               ) b
        on a.id = b.id
        and b.dupe=1
group by a.RowNumber
    ,a.id
    ,a.size
    ,a.desc1
    ,a.desc2

Не поспоришь, но тебе стоит рассмотреть структуру данных, с которыми ты работаешь.

  1. Выберите ваши данные, добавив столбец для нумерации строк
  2. Присоедините копию своих данных (только с разными записями)
  3. Суммирование столбца размера из списка отдельных записей
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...