2014-04-10 133 views
-2

你能帮我吗。mysql/case/when/then

我在下面的mysql查询中有错误?

SELECT *, 
CASE 
    WHEN vat = '1' THEN '1.10' 
    WHEN vat = '2' THEN '1.21' 
END AS _vat, 
CASE 
    WHEN sleva_kc != '' AND sleva_procent = '' THEN ((cena - sleva_kc) * _vat) 
    WHEN sleva_kc = '' AND sleva_procent != '' THEN ((cena * (1 - (sleva_procent/100))) * _vat) 
    WHEN sleva_kc = '' AND sleva_procent = '' THEN (cena * _vat) END AS _cena 
FROM kws_produkty WHERE _cena >= '100' AND _cena <= '500' 

我使用的MySQL连接器:

  • @mysql_connect(主机,用户,PASS)

解释:

  • 大桶= VAT
  • 价格从价格=
  • sleva_kc =现金折扣金额
  • sleva_procent =百分比折扣的金额

我需要得到输出:

  • _cena =价格有优惠和增值税(折扣可以是百分比或量,增值税可以更高或更低)

谢谢。

+0

你得到的错误信息是什么? –

+0

这些案例 - 应该返回结果还是这种筛选记录?语法非常错误。 –

+0

错误:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在'CASE WHEN'vat ='1'时使用正确的语法,然后'1.10'当vat ='2'那么'1.21'END AS _vat,CASE whe'在第1行。我是一名mysql初学者。 – jurkix

回答

0

您的SQL完全被破坏。你有你的case声明在一个他们不能使用的地方,你正在使用elseif,但确实有一个if声明。

SELECT 
    CASE .... END CASE, 
    IF ... THEN ... ELSEIF ... END IF 
FROM yourtable 
WHERE .... 

我建议你开始阅读语法文件:https://dev.mysql.com/doc/refman/5.0/en/case.html

0

CASE WHEN ... END表达式应该是字段列表中的一部分 - 你FROM -clause之前。

WHERE -clause使用列别名是非法的,见manual

标准SQL不允许在WHERE子句中的列别名引用。这种限制是强加的,因为当WHERE子句被评估时,列值可能还没有被确定。