如何将多行合并为一行

时间:2017-11-14 03:55:49

标签: mysql sql pivot-table mariadb

我想将多行合并为一行。 表type是动态的

桌房

room_id | room_name
-------------------
1       | room_A
2       | room_B
3       | room_C

表类型

type_id | type_name
-------------------
1       | type_I
2       | type_II
3       | type_II
4       | type_IV

表价格

price_id | room_id | type_id | price
------------------------------------
1        |    1    |    1    | 100
2        |    1    |    2    | 150
3        |    1    |    3    | 200
4        |    1    |    4    | 250
5        |    2    |    1    | 100
6        |    2    |    2    | 200
7        |    2    |    3    | 300
8        |    2    |    4    | 400
9        |    3    |    1    | 150
10       |    3    |    2    | 250
11       |    3    |    3    | 350
12       |    3    |    4    | 450

我想要的是这样的

       |                   price
room   |---------------------------------------
       | type_I | type_II | type_III | type_IV 
-----------------------------------------------
room_A |   100  |   150   |   200    |   250
room_B |   100  |   200   |   300    |   400
room_C |   150  |   250   |   350    |   450

1 个答案:

答案 0 :(得分:1)

尝试此查询,希望这可以帮助您:

SELECT TR.Room_Name
    ,MAX(CASE WHEN P.Type_ID=1 THEN Price END)type_I
    ,MAX(CASE WHEN P.Type_ID=2 THEN Price END)type_II
    ,MAX(CASE WHEN P.Type_ID=3 THEN Price END)type_III
    ,MAX(CASE WHEN P.Type_ID=4 THEN Price END)type_IV
FROM TABLE_PRICE P
INNER JOIN TABLE_ROOM TR ON TR.Room_ID=P.Room_ID
INNER JOIN TABLE_TYPE TT ON TT.Type_ID=P.Type_ID
GROUP BY TR.Room_Name