0

我陷入了一个复杂的问题。我知道它可以通过旋转来解决,但不知道如何去做。

数据如下:

------------------------------------------------------------------
| user_id | order_id | service |  head | coordinatior | contract |
------------------------------------------------------------------
| 1020    | 3        | 105     |   1   |    1         |     1    |
| 364277  | 1        | 105     |   0   |    0         |     0    |
| 364277  | 3        | 105     |   0   |    0         |     0    | 
| 367277  | 2        | 3763454 |   1   |    1         |     0    |
| 1020    | 1        | 3764142 |   0   |    1         |     1    |
| 1020    | 2        | 665443  |   0   |    1         |     1    |
------------------------------------------------------------------  

这就是我希望按照顺序拥有的方式:


| user_id | service1 |  head1 | coordinatior1 | contract1 | service2  |   head2 | coordinatior2 | contract2 |  service3 |  head3 | coordinatior3 | contract3 |
--------------------------------------------------------------------------------------------------------------------------------------------------------------
| 1020    | 3764142  |   0    |      1        |    1      |   665443  |   0     |      1        |    1      |   105     |   1    |      1        |    1      |
| 364227  | 105      |   0    |      0        |    0      |   3763454 |   1     |      1        |    0      |   105     |   0    |      0        |    0      |
--------------------------------------------------------------------------------------------------------------------------------------------------------------

现在我展示了 3 个服务,因为它会变成一个巨大的水平滚动条,但是每个 user_id 最多可以有 10 个服务,这意味着一些用户可能有 4 个服务。

这就是我要查询的。

SELECT user_id, service FROM table 
PIVOT (?) FOR order_id IN (0, 1, 2, 3 ,4 ,5 ,6, 7, 8, 9, 10))

我不知道如何继续前进。有什么帮助吗?提前致谢 :-)

4

1 回答 1

1

试试这个代码:

select user_id ,max(case when order_id=1 then service end) as service_1 ,max(case when order_id=2 then service end) as service_2 from table
group by user_id

service_1,2..10 是一样的。

于 2013-05-24T09:58:57.827 回答