Pergunta

No nosso banco de dados, nós temos um sistema configurado para manter o controle de aplicações. Temos uma coluna bool que indica se ou não o pedido for aprovado. Depois, há outra coluna que indica se ou não o pedido é negado. Se nenhuma coluna for verdade, então a aplicação é considerada pendente.

Existe alguma maneira fácil de fundir aqueles em um valor (como diria um tinyint ou talvez uma string que diz "aprovado", "negado" ou "pendente") em uma visão? Ou é que isto vai exigir algo como uma função com valor de tabela?

UPDATE: É difícil escolher uma resposta escolher uma vez que eles foram úteis. Eu vou com o Baldy desde que ele postou em primeiro lugar.

Foi útil?

Solução

Você pode usar uma instrução case em sua consulta: selecione caso aprovado quando 1, em seguida, 'Aprovado' else ...

declarações de caso podem ser aninhados para que possa aprofundar as diferentes opções.

Por que não preferem usar uma coluna int com 3 valores distintos, ou você pode até mesmo ir tão longe como a utilização de uma coluna bool, com nulo habilitado. Quando nulo que está pendente, 1 aprovado e 0 negado.

Outras dicas

Você pode usar uma instrução caso como este:

select case 
  when Approved = 1 then 'Approved'
  when Denied = 1 then 'Denied'
  else 'Pending'
  end 'Status'

Uma vez que você está armazenando tanto um e um valor negado Aprovado, você tem que se preocupar com a ordenação (que tem precedência se ambos são verdadeiros?). Você deve definitivamente só colocar isso em um modo de exibição para que você não tem que repetir que a lógica mais tarde.

Na sequência das permissões NTFS, eu sempre prefiro Negar ter precedência:

CASE 
    --Denied has precedence
    WHEN Denied = 1 THEN 'Denied'
    WHEN Approved = 1 THEN 'Approved'
    ELSE 'Pending'
END as Status

A menos que você tem outros requisitos que impedem isso, eu um pouco como sugestão de um int anulável de Baldy ou verificar coluna tinyint restrita.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top