MYSQL:Case语句中的条件

时间:2015-01-30 21:02:38

标签: php mysql

我的表room_category_charges包含

等字段
id room_category(id) category_charges payment_type(id)
1       1                   300              1
2       1                   600              2
3       2                   400              1
4       2                   800              2

并且还有另一个表patient_detail(patient_admission),其中选择了tpa(third_party_name)。无论是否选择了tpa名称,付款方式类型都会有所不同。

因此我试图使用以下mysql查询用例。

我想退还费用

  1. 为600,其中room_category为1且tpa_name不为null。
  2. 为400,其中room_category为2且tpa_name为null
  3. SQL:

      select rn.room_name, 
        CASE WHEN p.tpa_name is NULL
        THEN rcc.category_charges where rcc.payment_type=1
        ELSE rcc.category_charges where rcc.payment_type=2
        END AS 'charges'
      from estimate e,patient_detail p,room_name n
    

    then语句中的where子句和else语句生成错误,我如何在case语句中包含where子句。

    感谢。

2 个答案:

答案 0 :(得分:1)

好的,我找到了一个解决方案,似乎工作正常。欢迎任何更好的解决方案。

SELECT rn.room_name, rcc.category_charges
FROM estimate e,room_category rc, room_name rn, room_category_charges rcc, patient_detail p
WHERE rn.room_category = rc.id and rcc.room_category=rc.id
AND e.alloted_bed = p.bed_type
AND rcc.payment_type =2 and e.alloted_bed=rn.id and p.tpa_name is not null

union

SELECT rn.room_name, rcc.category_charges
FROM estimate e,room_category rc, room_name rn, room_category_charges rcc, patient_detail p
WHERE rn.room_category = rc.id and rcc.room_category=rc.id
AND e.alloted_bed = p.bed_type
AND rcc.payment_type =1 and e.alloted_bed=rn.id and p.tpa_name is null

答案 1 :(得分:0)

whereselect语句的一个子句,您不能在案例运算符中使用它。

case的语法如下:

CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

据我所知,您可能需要像这样的查询

select rn.room_name, 
rcc.category_charges
from estimate e
join room_name rn on e.alloted_bed=rn.id
join patient_detail p on e.ipd_patient_id=p.ipd_patient_id
join room_category_charges rcc on rn.room_category=rcc.id and ((rcc.payment_type=1 and p.tpa_name is null) or (rcc.payment_type=2 and p.tpa_name is not null))