2013-03-24 4 views
0

У меня есть таблица, как показано нижеСумма и Группировать по п

 
Name   Id   Sub1  Sub2 
Raj   1   75   76 
Ramesh  2   85   58 
Sekhar  3   65   55 
Siddharth 4   95   85  
Raj   1   52   75 
Sekhar  3   97   95 
Siddharth 5   78   85 

мне нужен выход следующим

 
Name   Id  Sub1  Sub2 
Raj   1   127  151 
Ramesh  2   85  58 
Sekhar  3   162  150  
Siddharth 4   95  85 
Siddharth 5   78  85 

То есть мне нужно иметь сумму знаков в теме колонны и группы по столбцу Идентификатор. Мне нужно отобразить Имя, но оно не должно быть включено в предложение GroupBy. Как написать запрос для получения желаемого результата? Заранее спасибо.

+1

так что если, например, Id 2 получает сгруппированное, что означает имя, отображаемое должна быть Рамеш (первой = мин (Name)) или Sekhar (последний = макс (Name))? Вы должны решить, как столбцы должны быть агрегированы, если они не содержатся в предложении group by. –

+0

Что такое реальный идентификатор 'Sekhar'? это '2' или' 3'? –

+0

Для Sekhar это 3. – vikasse

ответ

1

Попробуйте это: -

with cte as 
( Select row_number() over(partition by a.id order by a.ID) rn, 
    a.name,a.id , b.sum1, b.sum2 from 
    sample a 
    inner join 
    (Select id,sum(sub1) Sum1,sum(sub2) as sum2 
    from Sample 
    group by id)b 
    on a.id=b.id 
) 
Select name,id,sum1,sum2 from cte where rn=1 

или вы также можете использовать Sum и Over пункт с Subquery

Select * 
from 
(
    Select name,id,sum(sub1) over (partition by id) sub1, 
    sum(sub2) over(partition by id) sub2, 
    row_number() over(partition by Id order by id) rn 
    from sample 
) s 
where rn=1 
order by s.name 

SQLFIDDLE Demo

+1

Основываясь на всех различных комментариях/пояснениях к вопросу, я бы сказал, что второй запрос здесь выглядит как лучший вариант. Единственное, чего не хватает, это лучший столбец для упорядочения предложения 'row_number'; нет никакой гарантии согласованных результатов, просто упорядочивая Id.Надеемся, что OP может предоставить немного больше информации о таблице и, возможно, каком-то столбце времени, который будет использоваться в 'row_number', который будет работать всем. –

0

Похоже, после всех уточнений, это действительно так же просто, как:

select Name 
    , Id 
    , Sub1 = sum(Sub1) 
    , Sub2 = sum(Sub2) 
from MyTable 
group by Name, Id 
order by Id 

SQL Fiddle with demo.

+0

Столбец Name не должен включаться в кластер GroupBy. Именно там у меня возникли проблемы. – vikasse

+0

Почему вы не можете включить имя в группу? Вы показываете его в результатах запроса, чтобы он был включен. Результаты запроса - это именно то, что вам нужно. –

+0

Как будто у меня больше столбцов, таких как адрес, имя, фамилия и мой сценарий. Таким образом, существует вероятность, что адрес мог быть изменен, поэтому я не могу включить все эти столбцы в предложение groupby. Извините, что не перечислял все эти столбцы. – vikasse

0

Если вы необходимости исключить Name из группы по , предполагая, что ваш идентификатор является уникальным идентификатором, и только идентификаторы присваиваются только 1 nam е, совокупный Name с использованием MAX()

SELECT 
    MAX(Name) AS [Name] 
    ,Id 
    ,SUM(Sub1) AS [Sub1] 
    ,SUM(Sub2) AS [Sub2] 

FROM 
    MyTable 

GROUP BY 
    Id 

ORDER BY 
    Id 
Смежные вопросы