mysql - 将一列分隔为多列

标签 mysql sql

我正在尝试从数据库中检索数据,并且我加入了另一个表,我需要从该列获取数据,但将其分为多个列。

到目前为止我有这个代码:

SELECT 
    restaurants.name AS 'Name',
    extras_time_slots.restaurant_id AS 'DC ID',
    SUM(capacity) AS 'Seats opened', 
    meal_group_name AS 'Category',
    CASE
        WHEN extras_events.status = 0 THEN 'Offline'
        WHEN extras_events.status = 1 THEN 'Submitted'
        WHEN extras_events.status = 2 THEN 'Online'
        ELSE 'Unknown'
    END AS 'Status',
    CASE
        WHEN restaurants.region_id = 29 THEN 'Beijing'
        WHEN restaurants.region_id = 31 THEN 'Shanghai'
        WHEN restaurants.region_id = 63 THEN 'Guangzhou'
        WHEN restaurants.region_id = 83 THEN 'Shenzhen'
        WHEN restaurants.region_id = 86 THEN 'Hangzhou'
        WHEN restaurants.region_id = 88 THEN 'Suzhou'
        WHEN restaurants.region_id = 91 THEN 'Chengdu'
        ELSE 'Unknown'
        END AS 'City',
    (
        SELECT extras_event_meals.price
        FROM extras_event_meals
        WHERE meal_type LIKE 'lunch'
        AND extras_events_id 
    ) AS 'Lunch price',
    (
        SELECT extras_event_meals.price
        FROM extras_event_meals
        WHERE meal_type LIKE 'dinner'
        AND extras_events_id 
    ) AS 'Dinner price',
    (
        SELECT extras_event_meals.price
        FROM extras_event_meals
        WHERE meal_type LIKE 'brunch'
        AND extras_events_id 
    ) AS 'Brunch price'
FROM extras_time_slots
JOIN restaurants
    ON extras_time_slots.restaurant_id = restaurants.id
JOIN extras_events
    ON extras_events.restaurant_id = restaurants.id AND extras_events.project = extras_time_slots.project
JOIN extras_event_meals
    ON extras_event_meals.extras_event_id = extras_events.id
WHERE extras_time_slots.project = 'rwcn_autumn_2018'
GROUP BY restaurants.id;

因此,表 extras_events_meal_price 为一家餐厅提供了多份具有类型和价格的“餐食”。

以下是各列:

id
extras_events_id
meal_type
price
created_at
updated_at

一家餐厅可以有多个 Meal_type 和 Price,但它们位于同一列中,因此通过我的最后一个 SELECT 子查询,我尝试将它们分成 3 列:早午餐价格、午餐价格、晚餐价格。

我经常遇到的错误是:

Subquery returns more than 1 row.

最佳答案

您从未在子选择语句中完成查询。 extras_events_id 应等于 extras_events.id。如果不包含它,您只需检查它是否为 true,这将返回表中“lunch”的每个 meal_type:

SELECT extras_event_meals.price
FROM extras_event_meals
WHERE meal_type LIKE 'lunch'
AND extras_event_id = extras_events.id

关于mysql - 将一列分隔为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51780069/

相关文章:

mysql - 为什么超出max_allowed_pa​​cket?是由于 hibernate 或CP迁移引起的吗​​?

mysql - 页面订阅的表架构

php - 在同一个 PDO 查询中删除和选择

选择时的 MySQL CASE

sql - postgresql 中列的不同值

mysql - symfony 装置 : set ondelete: CASCADE on refclass table

mysql - 多对多左连接,其中根据日期的最小差异连接行

mysql - Openshift mySQL字符集服务器utf8mb4

sql - 检查将 nvl2 与多个分组依据一起使用

sql - 为什么为使用 ORDER by 的选择打开的游标不反射(reflect)对后续表的更新