将唯一的SQL行ID移动到列中

时间:2014-02-19 23:52:52

标签: sql pivot

我有以下数据

| 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 |

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果你知道每个PERSON_ID的最大OBJECT_ID值是多少,试试这个。只需添加更多联接,直到达到最大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;