2010-01-26 32 views
1

我已经写了一个查询来选择来自数据库的销售价值,并应用任何使用的折扣。折扣可以是百分比,也可以是平价。我的查询应用折扣(第一种情况说明),然后提取应用的金额。将两个条件逻辑结果合并为一个案例声明

它让我想如果有可能在一个病例陈述中完成这件事。

查询:

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 
+0

对不起 - 我没有注意到你的问题中的MySQL:我的答案是特定于ms-sql。 – davek 2010-01-26 21:53:02

回答

1

没有一个SELECT内部的CASE语句是一个函数,可以只返回一个值。你可以在一个存储过程中实现这个,你可以使用CASE或IF THEN。

+0

是否适用于MySQL中的所有条件语句? – 2010-01-26 23:57:40

+0

是的,SELECT中的CASE语句只允许THEN或ELSE的值,而存储过程(或存储函数)中的CASE语句可以包含任何表达式。 – MindStalker 2010-01-27 00:57:46

+0

我应该补充说,一个存储过程CASE不能像一个普通的SELECT循环一个表的多个记录,你必须使用游标。所以性能优势将会丧失。 – MindStalker 2010-01-27 01:00:34