2016-05-16 8 views
0

У меня есть эта таблица employee:Как отображать записи по вертикали?

emp_id | emp_name | emp_age  | emp_add 
----------------------------------------------------- 
1  | Bob  | 12   |  China 
2  | George | 14   |  Japan 
3  | Leo  | 20   |  USA 

, то я хочу, чтобы создать запрос на выборку (или могут быть сохранены процедурный), который будет отображать таблицу выше как этот

 COL1 | COL2 | COL3  | COL4 
----------------------------------------------------- 
emp_id  | 1  | 2  |  3 
emp_name | Bob | George |  Leo  
emp_age | 12  | 14  |  20 
emp_add | China | Japan |  USA 

это возможно? ? Я использую PostGreSQL :)

, если это возможно, я хочу, чтобы быть гибкими (ХП), так что я могу использовать его на другой стол .. спасибо :)

+0

В Oracle вы всегда можете обратиться PIVOT для такого рода сценария –

+0

Что делать, если ваша таблица имеет миллионы строк? –

+0

Я буду использовать такой запрос для таблиц с фиксированными значениями ... поэтому, я думаю, нет никакой возможности, чтобы таблица, которую я буду использовать для хранимой процедуры, будет содержать тысячи или миллионы записей. :)) – john1717

ответ

1

использование союзного и дело к получить желаемый результат поворота в соответствии с вашим случаем, как показано ниже

select 'emp_id' as col1, min(emp_id) col2,(select emp_id from employees where emp_id =2) 
         as col3,max(emp_id) as col4 
    from employees      
    union all 
    select 'emp_name' as col1,min(emp_name)as col2, 
      (select emp_name from employees where emp_id =2 and emp_add ='Japan') as col3, 
      (select emp_name from employees where emp_id =3 and emp_add ='USA') as col4 
from employees 
    union all 
      select 'emp_age' as col1,min(emp_age) as col2, 
           (select emp_age from employees where emp_id =2 and emp_age =14) as col3, 
           max(emp_age) as col4 
      from employees 
      union all 
      select 'emp_add' as col1,case when emp_add ='china' Then min(emp_add) end as col2, 
           (select emp_add from employees where emp_age=14)as col3, 
           (select emp_add from employees where emp_age=20)as col4 
      from employees