Создание представления со сравнением в выражении IF ELSE

0

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

3 ответа

1

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

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

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

0

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

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

Заметки:

  • Используйте только одинарные кавычки для констант строк и дат. Используйте обратные выходы, чтобы избежать идентификаторов.
  • Я изменил имена столбцов, поэтому им не нужно бежать.
  • Строковая константа не является логической. Само выражение просто работает.
  • 0
    Разве a.maxPercentage * (a.maximumprice / 100) не обязательно будет равен 1, если не равен 0, но больше или меньше любого числа, не равного 0 (в зависимости от значений переменных)? Если нет какой-либо причины, почему это выражение может дать только 0 или 1, я не вижу. Я предполагаю, что OP хотел 0 для выражения, равного 0, но 1 для любого другого результата.
  • 0
    @stickybit. , , Я уточнил ответ. Я интерпретировал вопрос как о синтаксической ошибке, а не о логике столбца, потому что в вопросе недостаточно информации для решения логики.
0

Я думаю, вам нужна функция 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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню