我有一个小查询,其中code_price是定价的10%。问题是,有时代码价格与定价相同,所以我在查询中尝试了这个。
SELECT round(st_codeprice(ss.stock_no, 'E', 'stockslc')::numeric, 2) as code_price
,(select case when code_price = ss.list_price then ss.list_price - (ss.list_price * .10) else code_price end)
from stockslc ss
st_codeprice
是一个从不同数据库中提取codeprice的函数。
它给我的错误是ERROR: column "code_price" does not exist
我想知道它是减法是问题还是案例陈述。
作者注意:如果我需要更改标题,请告诉我要将其更改为什么,我对此标题持怀疑态度。
答案 0 :(得分:2)
问题在于,在执行时,code_price别名是未知的。要解决这个问题,您可以完全取消别名,也可以在主SELECT之外生成别名,并将其作为JOIN(或子选择)的一部分包含在内。
删除别名如下所示:
SELECT round(st_codeprice(ss.stock_no, 'E', 'stockslc')::numeric, 2) as code_price,
(select case when round(st_codeprice(ss.stock_no, 'E', 'stockslc')::numeric, 2) = ss.list_price then ss.list_price - (ss.list_price * .10) else round(st_codeprice(ss.stock_no, 'E', 'stockslc')::numeric, 2) end)
FROM stockslc ss
但这有点难看,每个结果行有3次调用你的函数。
这是你如何使用JOIN:
SELECT
CASE
WHEN code_price = ss.list_price THEN ss.list_price - (ss.list_price * .10)
ELSE code_price
END
FROM stockslc ss
INNER JOIN (SELECT ss2.stock_no, round(st_codeprice(ss2.stock_no, 'E', 'stockslc')::numeric, 2) as code_price
FROM stockslc ss2) res ON ss.stock_no = res.stock_no
..更干净..
答案 1 :(得分:0)
你有没有试过这样的东西
SELECT
case when round(st_codeprice(ss.stock_no, 'E', 'stockslc')::numeric, 2) = ss.list_price
then ss.list_price - (ss.list_price * .10)
else round(st_codeprice(ss.stock_no, 'E', 'stockslc')::numeric, 2)
end as code_price
from stockslc ss