2014-02-19 5 views
-3

У меня есть следующие данныеПеремещение уникальных идентификаторов SQL строк в столбцы

| PERSON_ID | OBJECT_ID | VALUE | 
|-----------|-----------|--------| 
|  1000 |  5511 | blue | 
|  1000 |  5512 | green | 
|  1001 |  6655 | purple | 
|  1001 |  6656 | yellow | 
|  1001 |  6657 | orange | 

Я хочу сделать таблицу, что:

| PERSON_ID | OBJECT_ID1 | VALUE1 | OBJECTID2 | VALUE2 | OBJECTID3 | VALUE3 | 
|-----------|------------|--------|-----------|--------|-----------|--------| 
|  1000 |  5511 | blue |  5512 | green | (null) | (null) | 
|  1001 |  6655 | purple |  6656 | yellow |  6657 | orange | 

Любые идеи?

+0

Вам нужно «PIVOT». Но у вас нет ничего в базовом столе для поворота. Какие СУБД вы используете? –

+0

Это своего рода гипотетический, но я бы предположил mysql. – user3330445

ответ

0

Если вы знаете, как MAX число значений OBJECT_ID будет на PERSON_ID, попробуйте это. Просто добавьте еще Соединения, пока не достигнете MAX-номера значений OBJECT_ID:

select 
    p.PERSON_ID, 
    o1.OBJECT_ID OBJECT_ID1, 
    o1.VALUE VALUE1, 
    o2.OBJECT_ID OBJECT_ID2, 
    o2.VALUE VALUE2, 
    o3.OBJECT_ID OBJECT_ID3, 
    o3.VALUE VALUE3 
from (select distinct PERSON_ID from t_person_object) p 
    left join t_person_object o1 
    on o1.PERSON_ID = p.PERSON_ID 
    left join t_person_object o2 
    on o2.PERSON_ID = p.PERSON_ID 
    and o2.OBJECT_ID > o1.OBJECT_ID 
    left join t_person_object o3 
    on o3.PERSON_ID = p.PERSON_ID 
    and o3.OBJECT_ID > o2.OBJECT_ID 
group by 
    p.PERSON_ID; 
Смежные вопросы