mysql - 在 SQL 连接语句中添加 case 语句

标签 mysql sql sql-server

我试图在显示信息之前格式化我的 sql 中的所有数据

我的两个连接都工作正常,我有一段数据(状态)具有关联的标题以与值一起使用,但 CASE 语句不起作用。我目前有一个执行此数据转换的 PHP swtich 语句,但如果可能的话,我想在 SQL 中执行此操作

SELECT
 l.leadid, l.companyname, l.status, l.dateadded, addedby.name AS addedby, assignedto.name AS assignedto, l.address, l.city, l.prov, l.country, l.postalcode,
 l.phone, l.fax, l.facebook, l.twitter, l.youtube, l.instagram, l.website, l.logo
FROM leads l
  INNER JOIN staff addedby ON l.addedby = addedby.staffid
  INNER JOIN staff assignedto ON l.assignedto = assignedto.staffid
    CASE l.status
     WHEN l.status = 7 THEN l.status = 'Converted'
     WHEN l.status = 6 THEN l.status = 'Hot'
     WHEN l.status = 5 THEN l.status = 'Warm'
     WHEN l.status = 4 THEN l.status = 'Open'
     WHEN l.status = 3 THEN l.status = 'NEW'
     WHEN l.status = 2 THEN l.status = 'Cold'
       ELSE l.status = 'Dead'
     END    
     WHERE l.leadid = $id

最佳答案

  1. 你希望你的 CASESELECT 子句中
  2. 您的CASE 语法无效
  3. 作为替代方案,您可以使用 MySQL(因为您的问题用 mysql 标记)特定的不太冗长的函数 ELT()

话虽这么说,你可以做任何一个

SELECT
       l.leadid, l.companyname, 
       CASE l.status
         WHEN 7 THEN 'Converted'
         WHEN 6 THEN 'Hot'
         WHEN 5 THEN 'Warm'
         WHEN 4 THEN 'Open'
         WHEN 3 THEN 'NEW'
         WHEN 2 THEN 'Cold'
         ELSE 'Dead'
       END status, 
       l.dateadded, addedby.name AS addedby, 
       assignedto.name AS assignedto, l.address, 
       l.city, l.prov, l.country, l.postalcode,
       l.phone, l.fax, l.facebook, l.twitter, 
       l.youtube, l.instagram, l.website, l.logo
  FROM leads l JOIN staff addedby 
    ON l.addedby = addedby.staffid JOIN staff assignedto 
    ON l.assignedto = assignedto.staffid   
WHERE l.leadid = $id

SELECT
       l.leadid, l.companyname, 
       IFNULL(ELT(l.status - 1, 'Cold', 'New', 'Open', 'Warm', 'Hot', 'Converted'), 'Dead') status,
       l.dateadded, addedby.name AS addedby, 
       assignedto.name AS assignedto, l.address, 
       l.city, l.prov, l.country, l.postalcode,
       l.phone, l.fax, l.facebook, l.twitter, 
       l.youtube, l.instagram, l.website, l.logo
  FROM leads l JOIN staff addedby 
    ON l.addedby = addedby.staffid JOIN staff assignedto 
    ON l.assignedto = assignedto.staffid   
WHERE l.leadid = $id

这是 SQLFiddle 演示(两种情况)

关于mysql - 在 SQL 连接语句中添加 case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21058727/

相关文章:

SQL 错误 - 关键字 'Database' 附近的语法不正确

sql - 如何将一个表的每条记录中的数据复制到与第一个表相关的另一个表的多个记录中?

php - MySQL UNION 查询中的相同行名

sql-server - 为什么 MyGeneration 存储过程生成器模板不起作用?

mysql - 如何找到具有最多匹配列的行?

mysql - 复杂的 SELECT 语句包含多个未返回所需结果的联接

mysql - 在日期范围内加入 mysql

mysql - DATE_ADD 函数在更新中不起作用

sql - 将转储导入 Oracle

php - SQL 语句(内部连接?)