Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将两个条件逻辑结果组合成一个case语句_Mysql_Mysql Logic - Fatal编程技术网

Mysql 将两个条件逻辑结果组合成一个case语句

Mysql 将两个条件逻辑结果组合成一个case语句,mysql,mysql-logic,Mysql,Mysql Logic,我编写了一个查询,从数据库中选择销售值,并在使用折扣时应用折扣。折扣要么是一个百分比,要么只是一个固定值。我的查询应用折扣(第一个案例语句),然后提取应用的金额 这让我思考是否有可能在一个案例陈述中完成这一点 查询: SELECT SUM(CASE WHEN td.Transaction_ID IS NULL THEN p.Sale WHEN td.Transaction_ID IS NOT NULL AND d.Discount_Type = '0' THEN p.Sale -

我编写了一个查询,从数据库中选择销售值,并在使用折扣时应用折扣。折扣要么是一个百分比,要么只是一个固定值。我的查询应用折扣(第一个案例语句),然后提取应用的金额

这让我思考是否有可能在一个案例陈述中完成这一点

查询:

SELECT
SUM(CASE 
 WHEN td.Transaction_ID IS NULL
  THEN p.Sale
 WHEN td.Transaction_ID IS NOT NULL AND d.Discount_Type = '0'
  THEN p.Sale - (p.Sale * (dp.Discount_Percent/100))
 ELSE
  p.Sale - dv.Discount_Value
END) PriceDiscounted,
SUM(CASE
 WHEN td.Transaction_ID IS NOT NULL AND d.Discount_Type = '0'
  THEN (p.Sale * (dp.Discount_Percent/100))
 WHEN td.Transaction_ID IS NOT NULL AND d.Discount_Type = '1'
  THEN dv.Discount_Value
 ELSE '0'
END) Discount

不,SELECT中的CASE语句是一个函数,只能返回一个值。您可以在存储过程中实现这一点,在存储过程中可以使用CASE或IF-THEN。

不,SELECT中的CASE语句是一个函数,只能返回一个值。您可以在一个存储过程中实现这一点,在这个存储过程中,您可以使用CASE或IF-THEN。

抱歉-我没有注意到您问题中的mysql:我的答案是特定于ms sql的。这适用于mysql中的所有条件语句吗?是,SELECT中的CASE语句只允许THEN或ELSE的值,而存储过程(或存储函数)中的CASE语句可以包含任何表达式。我要补充的是,存储过程CASE不能作为常规SELECT循环遍历表的多个记录,必须使用游标。因此性能优势将丢失。这是否适用于MySQL中的所有条件语句?是的,SELECT中的CASE语句只允许THEN或ELSE的值,而存储过程(或存储函数)中的CASE语句可以容纳任何表达式。我应该补充,如果存储过程案例不能作为常规选择在表的多个记录中循环,则必须使用游标。因此,性能优势将丢失。