Создание представления со сравнением в выражении IF ELSE - PullRequest
0 голосов
/ 30 июня 2018

Итак, я решил создать представление из моей существующей таблицы, но я не могу использовать для них условие сравнения. Вопрос в том, что если мой бюджет меньше цены, то он должен отображаться как 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;

Ответы [ 3 ]

0 голосов
/ 30 июня 2018

Представление не может содержать процедурную логику, которая в точности соответствует конструкции IF ELSE. Вы сможете использовать только логические выражения в своем представлении. Попробуйте использовать оператор CASE здесь. Это позволит вам написать выражение, которое может быть оценено при запросе к представлению.

CASE 
    WHEN a.maxPercentage * (a.maximumprice / 100)
    THEN '1'
    ELSE '0'
END AS RiskyOrNot

Вам также нужно будет поместить этот оператор CASE в список столбцов, который вы начали выше.

0 голосов
/ 30 июня 2018

Следующее должно исправить вашу синтаксическую ошибку:

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 правильно. Без выборочных данных, желаемых результатов и лучшего объяснения логики другие могут только догадываться, какой на самом деле должна быть логика.

Примечания:

  • Используйте только одинарные кавычки для констант строки и даты. Используйте обратные метки для экранирования идентификаторов.
  • Я изменил имена столбцов, чтобы их не нужно было экранировать.
  • Строковая константа не является логическим значением. Само выражение просто работает.
0 голосов
/ 30 июня 2018

Полагаю, вам нужна была функция 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...