Объединение нескольких строк данных в одну СТРОКУ с использованием функции Sum и не выполнение этого для всей строки

#sql

#sql

Вопрос:

Изверги, пожалуйста, помогите мне с этим как можно скорее. Действительно ценю это, спасибо

У меня действительно простая таблица. Которое в виде трех столбцов

 Col A                Col B                    Col C
(unique)nameA        (UniqueID)1              (somenumber)10  
(unique)nameB        (UniqueID)2              (somenumber)20 
(unique)nameC        (UniqueID)3              (somenumber)30 
(unique)nameD        (UniqueID)4              (somenumber)10 
(unique)nameE        (UniqueID)5              (somenumber)50 
(unique)nameF        (UniqueID)6              (somenumber)35 
(unique)nameG        (UniqueID)7              (somenumber)50 
(unique)nameH        (UniqueID)8              (somenumber)10     
(unique)nameI        (UniqueID)9              (somenumber)25   
  

В соответствии с моим требованием к отчету мне нужно объединить уникальный идентификатор (1,2,3), присвоить ему уникальное имя ALFA и суммировать значения Col C, А combine (4,5,6) Присвоить ему уникальное имя BETA и суммировать значения Col C для них
И сохраните другой уникальный идентификатор, уникальное имя и их значения в Col C как есть
Упорядочите по значениям в Col C Desc и отобразите ЛУЧШИЕ 30 результатов.

Итак, конечный результат должен выглядеть следующим образом

 Col A                Col B                    Col C
BETA                 (unique ID 4,5,6)        95              --(10 50 35 from col C 
ALFA                 (unique ID 1,2,3)        60              --(10 20 30 from col C above)    
above)
(unique)nameG        (UniqueID)7              (somenumber)50 
(unique)nameI        (UniqueID)9              (somenumber)25
(unique)nameH        (UniqueID)8              (somenumber)10     
  

Комментарии:

1. Я не уверен, что понимаю. Вам нужно выполнить что-то особенное для 6 первых строк и вернуть остальные в обычном режиме !?!?

2. Вы упомянули, что результаты должны быть упорядочены по убыванию столбца c, но ваш пример этого не отражает. Было ли это ошибкой?

3. @ billy- Да, мне нужно выполнить что-то особенное для 6 первых строк и вернуть остальные в обычном режиме. Спасибо. Да, это была ошибка, поскольку предложение order by в примере rest такое же. Возможно ли здесь использовать операторы CASE?

4. Вам нужно быть более конкретным. Нет причин, по которым вы не должны иметь возможности использовать операторы case. Как вы собираетесь их использовать?

Ответ №1:

может ли что-то подобное сработать?

 declare @simpletable table( name varchar(50), uniqueid int, somenumber int)
insert into @simpletable
select 'a', 1, 10
union all
select 'b', 2, 20
union all
select 'c', 3, 30
union all
select 'd', 4, 10
union all
select 'e', 5, 50
union all
select 'f', 6, 35
union all
select 'g', 7, 50
union all
select 'h', 8, 10
union all
select 'i', 9, 25

select top 30 name,uniqueid,somenumber
from
(
select 'ALFA' as name, '1,2,3' as uniqueid, sum(somenumber) as somenumber
from @simpletable
where uniqueid between 1 and 3
union all
select 'BETA' as name, '4,5,6' as uniqueid, sum(somenumber) as somenumber
from @simpletable
where uniqueid between 4  and 6
union all
select name as name, cast(uniqueid as varchar(50)) as uniqueid, somenumber as somenumber
from @simpletable
where uniqueid > 6
) as x
order by somenumber desc