将case语句添加到SQL Query

时间:2014-08-15 12:12:59

标签: mysql sql case

对于以下SQL查询:

SELECT `bh`.`bug_id`, `p`.`name` AS `project`, `p2`.`name` AS `portfolio`, `u`.`username` AS `user`,FROM_UNIXTIME( `bh`.`date_modified` ) AS `modify_ts`,
`b`.`severity`, `b`.`priority`, `b`.`resolution`, `b`.`Status`
FROM `bug`.`mantis_bug_history_table` AS `bh`
LEFT JOIN `bug`.`mantis_bug_table` `b` ON `bh`.`bug_id` = `b`.`id`
LEFT JOIN `bug`.`mantis_user_table` `u` ON `bh`.`user_id` = `u`.`id` 
LEFT JOIN `bug`.`mantis_project_table` `p` ON `b`.`project_id` = `p`.`id` 
LEFT JOIN `bug`.`mantis_project_hierarchy_table` `ph` ON `b`.`project_id` = `ph`.`child_id`
LEFT JOIN `bug`.`mantis_project_table` `p2` ON `ph`.`parent_id` = `p2`.`id` 
WHERE `bh`.`field_name` = "status"
AND `bh`.`old_value` = 80
AND `bh`.`new_value` = 50

我想返回" bseveritybpriority"的价值。作为名字。所以目前他们将返回一个值,如20,40,60的严重性和优先级将具有值30,60,90。我想要做的是说,如果严重性值= 20,则将其称为sev1,40然后将其称为sev 2,对于优先级同样相同。

我将如何在上述查询中进行更改?

非常感谢您的帮助

2 个答案:

答案 0 :(得分:1)

联合查找表会更灵活,但硬编码看起来像这样:

SELECT
      bh.*
    , CASE
            WHEN b.severity = 20 THEN 'Sev1'
            WHEN b.severity = 40 THEN 'Sev2'
            WHEN b.severity = 60 THEN 'Sev3'
            WHEN b.severity = 80 THEN 'Sev4'
            ELSE 'v.low'
      END AS SeverityLbl
    , CASE
            WHEN b.priority = 30 THEN 'Priority1'
            WHEN b.priority = 60 THEN 'Priority2'
            WHEN b.priority = 90 THEN 'Priority3'
            ELSE 'v.low' 
      END AS PriorityLbl

FROM mantis_bug_history_table bh
      LEFT JOIN mantis_bug_table b
                  ON bh.bug_id = b.id

答案 1 :(得分:0)

在SELECT子句中使用CONCAT()函数来获取b.severity,b.priority"作为名称