嵌套case语句逻辑

cwdobuhd  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(419)

我正在处理一个查询,以平展wordpress数据库中的一些wp\u postsmeta数据,并需要为各种meta\u值设置一个特定值。我有一个类别键和各种类别值,对于每个值,我想为我们的品牌调色板设置一个名为color的列和一个名为color的列

  1. select post_title as title,
  2. MAX(CASE WHEN meta_key='corporate_calendar_category' THEN meta_value END) as 'category',
  3. MAX(CASE WHEN meta_key = 'corporate_calendar_subcategory' THEN meta_value END) as 'subcategory',
  4. // Do I need to include a nested CASE WHEN?
  5. MAX(CASE WHEN meta_key = 'corporate_calendar_subcategory' and meta_value = 'Marketing' THEN 'blueLagoon' END) as 'color',
  6. MAX(CASE WHEN meta_key = 'corporate_calendar_presenter' THEN meta_value END) as 'presenter',
  7. MAX(CASE WHEN meta_key = 'corporate_calendar_date' THEN meta_value END) as 'start_date',
  8. MAX(CASE WHEN meta_key = 'corporate_calendar_time' THEN meta_value END) as 'start_time',
  9. MAX(CASE WHEN meta_key = 'corporate_calendar_duration' THEN meta_value END) as 'duration',
  10. MAX(CASE WHEN meta_key = 'corporate_calendar_registration_link' THEN meta_value END) as 'registration_link',
  11. MAX(CASE WHEN meta_key = 'corporate_calendar_description' THEN meta_value END) as 'description',
  12. MAX(CASE WHEN meta_key = 'corporate_calendar_image_path' THEN meta_value END) as 'image_path'
  13. FROM wp_posts p
  14. JOIN wp_postmeta m ON p.id = m.post_id
  15. where p.post_type = 'calendar-event'
  16. and p.post_status = 'publish'
  17. GROUP BY p.id

“公司日历”子类别有许多值,“市场营销”、“人力资源”、“公司假日”等,对于每个子类别,我希望每一行都有特定的颜色。

  1. title category subcategory color presenter start_date etc.
  2. Example Training Marketing blueLagoon someone 08/29/2018
  3. Labor Day Reminder Company Holiday camelot 09/03/2018
  4. etc
  5. etc

实现这一点的最佳方法是在针对meta\ u值时使用嵌套case吗?还是有更好的办法?
我也尝试过包含if语句(如下),但每行都重复。

  1. if(meta_key = 'corporate_calendar_subcategory',
  2. CASE
  3. WHEN meta_value = 'Marketing' THEn 'blueLagoon'
  4. WHEN meta_value = 'Company Holiday' THEN 'camelot'
  5. END,
  6. '') as color,
mwg9r5ms

mwg9r5ms1#

是的,嵌套的 CASE 声明将是正确的方式,如果你知道所有的类别和颜色事先。如果类别颜色在另一个表中,则可以执行子选择或 JOIN 相反。
下面是一个嵌套case的示例:

  1. max(case when meta_key = 'corporate_calendar_subcategory' then
  2. case meta_value
  3. when 'Marketing' then 'blue'
  4. when 'Sales' then 'yellow
  5. when 'Development' then 'red'
  6. end
  7. end)

相关问题