Построение столбца представления из отдельных столбцов
-
03-07-2019 - |
Вопрос
В нашей базе данных есть система, настроенная для отслеживания приложений. У нас есть столбец bool, в котором указывается, одобрена ли заявка. Тогда есть другой столбец, который указывает, отклонено ли приложение. Если ни один из столбцов не равен true, то приложение считается ожидающим рассмотрения.
Есть ли какой-нибудь простой способ объединить их в одно значение (например, например, tinyint или, может быть, строку с надписью «утверждено», «отказано» или «ожидает рассмотрения») в представлении? Или для этого потребуется что-то вроде табличной функции?
ОБНОВЛЕНИЕ: трудно выбрать ответ, так как все они были полезны. Я пойду с Бэлди с тех пор, как он написал первым.
Решение
вы можете использовать оператор case в вашем запросе: выберите подтвержденный случай, когда 1, затем «Одобрено», в противном случае ...
Операторы case могут быть вложенными, чтобы вы могли вникать в различные варианты. Р>
Почему бы не использовать столбец int с 3 различными значениями, или вы даже можете пойти так далеко, как использование одного столбца bool с включенным нулем. Если значение равно нулю, 1 одобрено, а 0 отклонено.
Другие советы
Вы можете использовать оператор case следующим образом:
select case
when Approved = 1 then 'Approved'
when Denied = 1 then 'Denied'
else 'Pending'
end 'Status'
Поскольку вы сохраняете значения Approved и Denied, вам нужно беспокоиться об упорядочении (которое имеет приоритет, если оба значения имеют значение True?). Вы должны определенно помещать это только в представление, чтобы вам не пришлось повторять эту логику позже.
Исходя из разрешений NTFS, я всегда предпочитаю, чтобы Deny имел приоритет:
CASE
--Denied has precedence
WHEN Denied = 1 THEN 'Denied'
WHEN Approved = 1 THEN 'Approved'
ELSE 'Pending'
END as Status
Если у вас нет других требований, которые его исключают, мне скорее нравится предложение Балди обнулить int или проверить ограниченный столбец tinyint.