2012-01-18 2 views
0

У меня есть type столбец в моей таблице, type Значение столбца: HOT и NOT. из этого я хочу показать HOT и NOT значения столбца в одной строке.Как отобразить один ряд из двух рядов

Пример

Таблица1

Period ID Total 

11/2011 101 250 
12/2011 102 350 
11/2011 103 450 
.... 

Table2

Period ID Type Value 

11/2011 101 NOT 500 
11/2011 101 HOT 200 
12/2011 102 NOT 300 
12/2011 102 HOT 200 
.... 

Я хочу, чтобы отобразить тип (Hot и Not) в одной строке

Ожидаемые результаты

Period ID NOT HOT Total 

11/2011 101 500 200 250 
12/2011 102 300 200 350 
11/2011 103 300 400 450 
.... 

Как сделать запрос.

ответ

3

Если я могу предположить, что table1 имеет первичный ключ (Period, ID) и table2 имеет первичный ключ (Period, ID, тип), то вы можете сделать:

select 
    t1.period 
    , t1.id 
    , t2n.value [not] 
    , t2h.value [hot] 
    , t1.total 
from 
    table1 t1 
    left join table2 t2n 
     on t1.period = t2n.period 
     and t1.id = t2n.id 
     and t2n.type = 'Not' 
    left join table2 t2h 
     on t1.period = t2h.period 
     and t1.id = t2h.id 
     and t2h.type = 'Hot' 

Это будет извлекать все строки из таблицы 1 с соответствующими «не» и «горячими» аналогами, соответствующими t2n и t2h выше.

+0

+1. Также вероятно, что '(ID)' является «PK1» таблицы1 и «(ID, Тип)», «Table2» и «Table2.Period» является избыточным столбцом, который просто дублирует «Table1.Period». –

+0

@CD Jorgensen, он работает, но в таблице2 у меня больше времени, чем в таблице1, поэтому я хочу отобразить весь период времени из таблицы2 и таблицы 2 в тот же период таблицы1 – Gopal

+0

@RemoRose: попробуйте выполнить полное объединение вместо левых объединений; для получения правильных результатов для 'period' и' id', используйте выражения 'CASE' или' COALESCE() '. –

2

Вы попробовали?

select base.period, base.id, sum(notchild.value) as notsum, sum(hotchild.value) as hotsum, base.total 
from table1 base 
left outer join table2 notchild 
    on base.period = notchild.period and base.id = notchild.id and notchild.type = 'NOT' 
left outer join table2 hotchild 
    on base.period = hotchild.period and base.id = hotchild.id and hotchild.type = 'HOT' 
group by base.period, base.id, base.total 
+0

Вы, вероятно, забыли добавить 'notchild.type = 'NOT'' и' hotchild.type =' HOT'' где-нибудь (скорее всего, в условия соединения). –

+0

Вы абсолютно правы! Извините за оригинальный плакат. Я немедленно исправлю ответ. –

0

Вы можете использовать JOIN (Check this), чтобы сделать это. Присоедините свои две таблицы и выполните на нем SELECT.

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