我有三个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的总和作为列名。
有人可以帮忙吗?