0

考虑以下 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

我该如何解决这个错误?

4

3 回答 3

0
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 
于 2013-10-28T10:49:59.883 回答
0

我不熟悉caseSQL 语句中的使用,但你不应该放在END后面吗?

于 2013-10-28T10:27:33.097 回答
0

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

.......
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
于 2013-10-28T10:27:37.160 回答