Postgresql CASE语句 – 我可以在我的SELECT中使用CASE的返回值
我有一个产品数据库有多个表来存储定价(由于默认定价和每个产品颜色可选的覆盖定价),我在查询中有CASE语句来获取
*产品的原价 *销售价格的产品,如果是出售 如果产品出售,我还需要计算折扣.在尝试这之前,请看我现有SQL的细节. SELECT p.productid,p.stylename,CASE WHEN (ppo.original_price IS NOT NULL) THEN ppo.original_price ELSE pp.original_price END AS final_original_price,CASE WHEN (ppo.original_price IS NOT NULL) THEN ppo.sale_price ELSE pp.sale_price END AS final_sale_price FROM product p,... etc. 上面的代码工作(我已经简化了),并且基本上,产品的原始价格存储在列别名“final_original_price”中,销售价格(可能为NULL)被返回为“final_sale_price”. 我现在想添加一个额外的行到SELECT以获得折扣.我不能使用实际表中的现有字段,因为我想要返回值“final_original_price”和“final_sale_price”来进行计算. 例如 SELECT p.productid,CASE WHEN (ppo.original_price IS NOT NULL) THEN ppo.sale_price ELSE pp.sale_price END AS final_sale_price,((final_original_price - final_sale_price) / final_original_price * 100) AS final_discount_percentage FROM product p,... etc. 以上不起作用,因为Postgresql返回“ERROR:column”final_original_price“不存在于字符…..” 所以,显然我不能使用CASE的返回值.我关于使用什么解决方案的问题: 1)我可以使用我想要的案例的返回值吗? 以上解决方案可能是最简单的,但是我也想知道,如果我有时间这样做,这里有其他的解决方案值得考虑吗?例如,这是写一个“视图”的好方法吗?就我个人而言,我从来没有设置过,据我所知,数据库选择工作仍然在后台进行,但是如果设置了,那么从开发人员的角度来看,上面的结尾查询可以更容易理解. 非常感谢!
使用
SELECT productid,stylename,final_original_price,final_sale_price,((final_original_price - final_sale_price) / final_original_price * 100) AS final_discount_percentage FROM ( SELECT p.productid,CASE WHEN (ppo.original_price IS NOT NULL) THEN ppo.sale_price ELSE pp.sale_price END AS final_sale_price FROM product p,... etc. ) 上面的确正是你所要求的…如果由于某种原因你不想使用它,然后将CASE语句插入到计算(从你的问题的选项2). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |