2016-09-02 2 views
1

У меня есть таблица, которая имеет такой вид записиКак объединить две строки в одну в Oracle?

ID wk category mo tu wedn 
1 1 3  4 4 4 
1 1 4  5 5 5 
1 1 18  7 7 7 
1 2 3  4 4 4 
1 2 4  5 5 5 
1 2 17  2 2 2 

Как сцепить строки имеют ту же категорию, и держать не-соответствием строки из обеих недель = 1 и WK = 2, а во что-то вроде следующего и данные недель = 1 требуются от данных из недель = 2:

ID category mo tu wedn mo2 tu2 wedn2 
1  3 4 4 4 4 4 4 
1  4 5 5 5 5 5 5 
1  18 7 7 7 0 0 0 
1  17 0 0 0 2 2 2 

Спасибо,

+1

Вас интересуют только wk = 1 и wk = 2, или вы хотите обобщить это на wk = n? Если это просто wk = 1 и wk = 2, просто слева присоедините таблицу к себе, дважды фильтруя по wk = 1 и wk = 2 соответственно и группируйте по. Если это wk = n, то, что вы хотите создать, называется «сводной таблицей» или «кросс-таблицей». Google это. – Asaph

ответ

2

Выполнить полное внешнее соединение, и использовать wk различать, какие строки идет к тому, что сторона - слева или справа:

select 
    NVL(a.id, b.id) 
, NVL(a.category, b.category) 
, NVL(a.mo, 0) 
, NVL(a.tu, 0) 
, NVL(a.wedn, 0) 
, NVL(b.mo, 0) as mo2 
, NVL(b.tu, 0) as tu2 
, NVL(b.wedn, 0) as wedn2 
from MyTable a 
full outer join MyTable b ON a.id=b.id AND a.wk=1 AND b.wk=2 AND a.category=b.category 
where (a.wk is null or a.wk <> 2) and (b.wk is null OR b.wk <> 1) 
+0

Благодарим вас за быстрое решение. Я застрял в поиске способа заменить null в полях id и category, когда записи присутствуют только в wk = 1 или wk = 2. Спасибо. – Bigyellowbee

+0

@Bigyellowbee Добро пожаловать. Я попробовал запрос, и тот, который я изначально создал больше строк, чем вам нужно. Я добавил условие «где» в конце, чтобы устранить эту проблему. – dasblinkenlight

+0

Цените свое отношение. – Bigyellowbee

Смежные вопросы