因此,我决定从现有表中创建视图,但无法对其使用“比较”条件。问题是,如果我的预算小于价格,则该列应在列中显示为1,否则为0。此外,该列应为一个名为RiskyorNot的布尔值。为此,我使用了一个公式,但无法获取它由于某些mysql语法错误而关闭。任何帮助下面是我的声明:
CREATE VIEW PricevsAllowance as SELECT c.names AS 'category name ',a.maxamt AS 'allowance', tot.totalexpend AS 'total expenditure',RiskyorNot BOOLEAN FROM Category c JOIN allowance a ON c.allow_id = a.allow_id JOIN Totalexpanddetail t ON t.cat_num = c.cat_num
IF(a.maxPercentage *(a.maximumprice/100)) THEN
RiskyorNot = '1'
ELSE
RiskyorNot = '0'
END IF;
答案 0 :(得分:1)
视图不能包含过程逻辑,这正是IF ELSE构造的本质。您将只能在视图中使用逻辑表达式。在此处尝试使用CASE statement。这样一来,您就可以编写一个查询视图时可以求值的表达式。
CASE
WHEN a.maxPercentage * (a.maximumprice / 100)
THEN '1'
ELSE '0'
END AS RiskyOrNot
您还需要将此CASE语句放入您在上面开始的列列表中。
答案 1 :(得分:0)
我猜您想使用if()
函数,而不是IF
statement函数。后者不能在查询中使用。 if()
也必须进入列列表。带有空格的别名(尤其是结尾)在将来会引起头痛。
CREATE VIEW pricevsallowance
AS
SELECT c.names category_name,
a.maxamt allowance,
tot.totalexpend total_expenditure,
if(a.maxpercentage * a.maximumprice / 100, 1, 0) riskyornot
FROM category c
INNER JOIN allowance a
ON c.allow_id = a.allow_id
INNER JOIN totalexpanddetail t
ON t.cat_num = c.cat_num;
答案 2 :(得分:0)
以下应解决您的语法错误:
main
这可能会或可能不会正确计算CREATE VIEW PricevsAllowance as
SELECT c.names AS category_name,
a.maxamt AS allowance,
tot.totalexpend AS total_expenditure,
a.maxPercentage * (a.maximumprice / 100) as RiskyorNot
FROM Category c JOIN
allowance a
ON c.allow_id = a.allow_id JOIN
Totalexpanddetail t
ON t.cat_num = c.cat_num;
。没有样本数据,期望的结果以及对逻辑的更好解释,其他人只能猜测逻辑应该是什么。
注意: