2015-03-21 2 views
1

В настоящее время у меня есть запрос из одной таблицы, которая возвращает несколько строк. Я хотел бы объединить их в одну строку для каждого человека.Как несколько строк в одну строку?

Есть ли способ сделать это?

Пример данных из запроса и результат мне нужно:

http://upic.me/i/wf/stack.jpg

+0

пожалуйста, напишите ваш код/​​запросы здесь. –

ответ

4

Использование группировки и агрегатов:

select 
    max(Seq) as Seq, 
    ID, 
    sum(RED1) as RED1, 
    sum(RED2) as RED2, 
    sum(RED3) as RED3, 
    sum(GREEN1) as GREEN1, 
    sum(GREEN2) as GREEN2, 
    sum(GREEN3) as GREEN3 
from 
    Table 1 
group by 
    ID 

Демо: http://sqlfiddle.com/#!4/ad36e/3

Примечание: Вы должны использовать различные агрегаты для значения в зависимости от того, какой результат вы хотите, если поле имеет более одного ненулевого значения в группе. Использование sum дает вам сумму значений в группе, используя max, дает вам самое высокое значение в группе.

+0

Почему вы выполняете операцию агрегации, кроме seq? – TechnoCrat

+0

@TechnoCrat: получить надежный результат. Некоторые базы данных позволяют получать поля, которые вы не группируете (я не знаю, как это делает Oracle), но тогда у вас нет контроля над тем, какое значение вы получаете от группы. – Guffa

+0

Тогда вы правы, иначе данные не требуются – TechnoCrat

3

Попробуйте этот запрос:

select ID , max(seq) Seq, max(red1) RED1 , max(red2) RED2, max(red3) RED3, 
max(green1) GREEN1, max(green2) GREEN2, max(green3) GREEN3 
from Table1 
group by ID; 
+0

Если какое-либо значение в REDx & GREENx является строкой, я могу использовать SUM или MAX? – skyofwin

+0

вы можете использовать max для строк, если хотите показать значение, которое не является нулевым – psaraj12

+0

@skyofwin, а столбец должен содержать только строки. Если столбец содержит как строки, так и число (тип данных строки), то функция MAX вернет только строку. –