MySQL从另一个表中选择动态列名

时间:2015-07-31 13:06:34

标签: php mysql pivot-table

我有三个MySQL表。我想从一个表中选择行,并将它们用作select语句中的列名。

以下是我的三张桌子。

地点

id   location_name
1    London
2    Barnes

预订

id   location_id    voucher_code    places    price
1    1              DISC100         2         620

id    voucher_code    net_value
1     DISC100         155
2     DISC200         120

我正在使用的当前SQL如下。但是,您会注意到我必须在我的case语句中手动选择列名。我想让这种动态。

当前SQL

select 
`locations`.`location_name`, 
"All time" as dates, 
ifnull(bookings.places, 0) as places, 
    case when vouchers.net_value = 155 then 1 else 0 end as voucher155, 
    case when vouchers.net_value = 135 then 1 else 0 end as voucher135, 
    case when vouchers.net_value is null then 1 else 0 end as paidbycard 
from 
    `locations` 
inner join `bookings` on `locations`.`id` = `bookings`.`location_id` 
left join `vouchers` on `bookings`.`voucher_code` = `vouchers`.`voucher_code` 
group by `locations`.`id`

我想制作动态的部分如下。

case when vouchers.net_value = 155 then 1 else 0 end as voucher155, 
case when vouchers.net_value = 135 then 1 else 0 end as voucher135, 
case when vouchers.net_value is null then 1 else 0 end as paidbycard 

我需要将这些列设置为动态的原因是因为用户能够添加/删除凭证,因此列需要像凭证一样进行更改。

新SQL应该会产生以下结果:

location_name    dates      places    netValue155    netValue135   paidbycard
London           All time   2         155.00         0.00          465.00

总而言之,我想从vouchers中选择net_value的总和作为列名。

有人可以帮忙吗?

0 个答案:

没有答案