Domanda

Nel nostro database, abbiamo un sistema impostato per tenere traccia delle applicazioni. Abbiamo una colonna bool che indica se l'applicazione è stata approvata o meno. Quindi c'è un'altra colonna che indica se l'applicazione è negata o meno. Se nessuna delle colonne è vera, l'applicazione è considerata in sospeso.

Esiste un modo semplice per unirli in un unico valore (come ad esempio un minuscolo o forse una stringa che dice "approvato", "negato", o "in attesa") in una vista? O questo richiederà qualcosa come una funzione con valori di tabella?

AGGIORNAMENTO: È difficile scegliere una risposta, poiché sono state tutte utili. Andrò con Baldy da quando ha pubblicato per primo.

È stato utile?

Soluzione

è possibile utilizzare un'istruzione case nella query: seleziona caso approvato quando 1, quindi 'Approvato' altrimenti ...

Le istruzioni del caso possono essere nidificate in modo da poter approfondire le diverse opzioni.

Perché non usare piuttosto una colonna int con 3 valori distinti, oppure puoi persino andare fino all'utilizzo di una colonna bool, con null abilitato. Se null è in sospeso, 1 approvato e 0 negato.

Altri suggerimenti

Puoi usare un'istruzione case come questa:

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

Dato che stai memorizzando sia un valore Approvato che Negato, devi preoccuparti di ordinare (che ha la precedenza se entrambi sono Veri?). Dovresti decisamente inserirlo in una vista, quindi non dovrai ripetere quella logica in seguito.

Seguendo le autorizzazioni NTFS, preferisco sempre che Nega abbia la precedenza:

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

A meno che tu non abbia altri requisiti che lo precludano, mi piace piuttosto il suggerimento di Baldy di un int nullable o di controllare la colonna tinyint vincolata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top