Поэтому я решил создать представление из моей существующей таблицы, но я не могу использовать для них условие сравнения. Вопрос в том, что мой бюджет меньше цены, тогда он должен отображаться как 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;
В представлении не может содержаться процедурная логика, что и является конструкцией IF ELSE. Вы сможете использовать только логические выражения. Попробуйте использовать оператор CASE здесь. Это позволит вам написать выражение, которое может быть оценено при запросе представления.
CASE
WHEN a.maxPercentage * (a.maximumprice / 100)
THEN '1'
ELSE '0'
END AS RiskyOrNot
Вам также необходимо разместить этот оператор CASE в списке столбцов, который вы указали выше.
Следующее должно исправить вашу синтаксическую ошибку:
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;
Это может или не RiskyOrNot
правильно рассчитать RiskyOrNot
. Без выборочных данных, желаемых результатов и лучшего объяснения логики другие могут только догадываться о том, какова должна быть логика.
Заметки:
Я думаю, вам нужна функция if()
, а не оператор IF
. Последнее не может использоваться в запросе. Также 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;
a.maxPercentage * (a.maximumprice / 100)
не обязательно будет равен 1, если не равен 0, но больше или меньше любого числа, не равного 0 (в зависимости от значений переменных)? Если нет какой-либо причины, почему это выражение может дать только 0 или 1, я не вижу. Я предполагаю, что OP хотел 0 для выражения, равного 0, но 1 для любого другого результата.