MYSQL 中的多个案例语句带有否定


MULTIPLE CASE STATEMENTS IN MYSQL WITH NEGATION

考虑以下 mysql 语句:

SELECT costs.cost AS package, payments.cost AS labs, patients.fname, patients.lname, patients.sname, visit.id AS visitid, patients.id, pharm_payments.cost AS pharm_costs ,costs.cost+payments.cost+pharm_payments.cost AS total_cost ,
CASE pharm_payments.cost WHEN pharm_payments.visitid=visit.id THEN pharm_payments.cost
WHEN pharm_payments.visitid != visit.id THEN 0
CASE costs.cost WHEN cost.visitid=visit.id THEN costs.cost
WHEN costs.visitid != visit.id THEN 0
FROM costs
LEFT JOIN visit ON costs.visitid = visit.id
LEFT JOIN patients ON visit.patientid = patients.id
LEFT JOIN pharm_payments ON pharm_payments.visitid = visit.id
LEFT JOIN payments ON payments.visitid = visit.id
WHERE costs.paid =  'not paid'
AND visit.VisitDate >= CURDATE( ) 
LIMIT 0 , 30

查询的预期结果应该是访问ID不一样的地方,它应该返回一个零值。我不断收到以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE costs.cost WHEN cost.visitid=visit.id THEN costs.cost WHEN costs.visitid !=' at line 4

如何解决此错误?

我不熟悉 SQL 语句中 case 的使用,但您不应该在后面加上END吗?

SELECT 
  costs.cost AS package,
  payments.cost AS labs,
  patients.fname,
  patients.lname,
  patients.sname,
  visit.id AS visitid,
  patients.id,
  pharm_payments.cost AS pharm_costs,
  costs.cost + payments.cost + pharm_payments.cost AS total_cost,
  CASE
    pharm_payments.cost 
    WHEN pharm_payments.visitid = visit.id 
    THEN pharm_payments.cost 
    WHEN pharm_payments.visitid != visit.id 
    THEN 0 END AS  pharm_payments_cost,
    CASE
      costs.cost 
      WHEN cost.visitid = visit.id 
      THEN costs.cost 
      WHEN costs.visitid != visit.id 
      THEN 0 END AS costs_cost 
FROM
  costs 
  LEFT JOIN visit 
    ON costs.visitid = visit.id 
  LEFT JOIN patients 
    ON visit.patientid = patients.id 
  LEFT JOIN pharm_payments 
    ON pharm_payments.visitid = visit.id 
  LEFT JOIN payments 
    ON payments.visitid = visit.id 
WHERE costs.paid = 'not paid' 
  AND visit.VisitDate >= CURDATE() 
LIMIT 0, 30 

我认为你的案例陈述应该是这样的:

.......
CASE 
    WHEN pharm_payments.visitid=visit.id 
    THEN pharm_payments.cost
    ELSE 0
END AS Column1,
CASE 
    WHEN cost.visitid=visit.id 
    THEN costs.cost
    ELSE 0
END AS Column2

更新

为了将它们相加,您可以这样做:

.......
(
   CASE 
       WHEN pharm_payments.visitid=visit.id 
       THEN pharm_payments.cost
       ELSE 0
   END
) 
+
(
   CASE 
       WHEN cost.visitid=visit.id 
       THEN costs.cost
       ELSE 0
   END 
)AS total