4

私たちのデータベースには、アプリケーションを追跡するためのシステムが設定されています。アプリケーションが承認されたかどうかを示す bool 列があります。次に、アプリケーションが拒否されたかどうかを示す別の列があります。どちらの列も true でない場合、アプリケーションは保留中であると見なされます。

ビューでそれらを 1 つの値 (tinyint や、「承認済み」、「拒否済み」、または「保留中」を示す文字列など) にマージする簡単な方法はありますか? それとも、テーブル値関数のようなものが必要になるのでしょうか?

更新:回答はすべて役に立ちましたので、回答を選択するのは困難です。彼が最初に投稿したので、私は baldy's に行きます。

4

3 に答える 3

6

Approved 値と Denied 値の両方を格納しているため、順序について心配する必要があります (両方が True の場合、どちらが優先されますか?)。後でそのロジックを繰り返す必要がないように、必ずこれをビューに入れる必要があります。

NTFS アクセス許可に続いて、私は常に拒否を優先することを好みます。

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

それを排除する他の要件がない限り、私は、null 許容 int またはチェック制約付きの tinyint 列に関する Baldy の提案が好きです。

于 2008-10-22T12:47:46.930 に答える
6

次のような case ステートメントを使用できます。

select case 
  when Approved = 1 then 'Approved'
  when Denied = 1 then 'Denied'
  else 'Pending'
  end 'Status'
于 2008-10-22T12:39:07.430 に答える
2

クエリで case ステートメントを使用できます: select case approval when 1 then 'Approved' else ...

Case ステートメントはネストできるため、さまざまなオプションを詳しく調べることができます。

3 つの異なる値を持つ int 列を使用しないでください。または、null を有効にして 1 つの bool 列を使用することもできます。null の場合は保留中で、1 が承認され、0 が拒否されます。

于 2008-10-22T12:38:07.370 に答える