Построение столбца представления из отдельных столбцов

StackOverflow https://stackoverflow.com/questions/225535

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top