2016-04-07 16 views
1

私は以下の結果を得るために、SQLを書いていない:アクティブおよび非アクティブ状態のためのSQL

Case No: 1   Status:Inactive 
    Case No: 2   Status:Active 
    Case No: 2   Status:Inactive 
    Case No: 3   Status:Active 

SQLは次のとおりです。

select Case No, 
Case when status in ('Hospital', 'Discharge') then 'Inactive' else 'Active' end as status 
from Cases 

場合はケースを保護ない、たとえばケースなし2のために、そこにステータスが非アクティブでアクティブな場合はステータスが非アクティブです。 次の結果を得るためにSqlを変更するにはどうすればよいですか?

Case No :1    Status:Inactive 
Case No :2    Status:Inactive 
Case No: 3    Status:Active 
+1

あり、これを達成するには多くの方法があるが、それはあなたの実際のテーブル構造に依存します。ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

ステータスはvarchar型です。私はsum()またはMax()を使用することはできません。 ) – Ice

答えて

0

クエリ

Select [Case No], 
CASE MAX(Status) WHEN 0 THEN 'active' ELSE 'Inactive' END Status 
FROM 
(
select [Case No], 
    CASE WHEN status in ('Hospital', 'Discharge') THEN 1 ELSE 0 END status 
    from Cases) C 
group by [Case No] 

SQL demo link

を参照してくださいスクリーンショット enter image description here

+0

これは動作しません。 – Ice

+0

@Cindy sqlのフィドルリンクが追加されました。クリックして、左側の値を変更して、スキーマを構築し、クエリを再実行してください。 – DhruvJoshi

+0

ありがとうございました! – Ice

2

あなたのステータスのためにあなたが持っている名前を考えると以下しようとすると、それを使用するのに十分であるように思われますmax()

select CaseNo, 
     max(Case when status in ('Hospital', 'Discharge') then 'Inactive' else 'Active' 
      end) as status 
from Cases 
group by CaseNo; 

名の辞書式順序に依存しない、より一般的な解決策がある:

select CaseNo, 
     (case when sum(status in ('Hospital', 'Discharge')) > 0 
      then 'Inactive' 
     else 'Active' 
      end) as status 
from Cases 
group by CaseNo; 
関連する問題