2017-01-19 5 views
1

完全なselectステートメントを使用する方法があり、特定のフィールド(SQL Server)に既定値の行を返す行が返されない場合、私は疑問に思っていますか?完全な選択ステートメントELSEをデフォルト値に設定しますか?

SELECT COUNT(CASE WHEN CAST(c.InjuryDate as DATE)>DATEADD(dd,-60, getdate()) THEN b.InjuryID end) InjuryCount, a.PersonID 
FROM Person_Info a 
    JOIN Injury_Subject b on b.PersonID=a.PersonID 
    JOIN Injury_Info c on c.InjuryID=b.InjuryID 
WHERE EXISTS (SELECT * FROM Hospital_Record d WHERE d.PersonID=b.PersonID and d.InjuryID=b.InjuryID) --There could be multiple people associated with the same InjuryID 
GROUP BY a.PersonID 

If NOT EXISTS (SELECT * FROM Hospital_Record d WHERE d.PersonID=a.PersonID) THEN '0' in InjuryCount 

表示する怪我をした各人の行が必要です。私は最後の60日間に入院した傷害の数をカウントしたいと思います。病院に入院していない場合は、行を生成したいが、InjuryCount列に「0」と表示する。私はこの束と一緒に遊んだことがあります。私の日付をWHEREからSELECTに移動して、ELSEコンボなどを試してみてください。誰かが私が欲しいものを手に入れる方法を理解するのに役立つでしょうか?

+2

[悪い習慣を蹴るために:のような表の別名を使用する(A、B、C )または(t1、t2、t3) - Aaron Bertrand](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-table-aliases-like- abc-or-t1-t2-t3.aspx) – SqlZim

+0

本文中の「一般バージョン」に注意してください。それらは私のテーブル、フィールド、またはエイリアスではありません。 – Bester

答えて

0

これは、入力と所望の出力の一例なしで伝えるのは難しいのですが、私は、これはあなたがのために行くしているものだと思う:

select 
    InjuryCount = count(case 
     when cast(ii.InjuryDate as date) > dateadd(day,-60,getdate()) 
      then i.InjuryId 
     else null 
     end 
     ) 
    , p.PersonId 
    from Person_Info p 
    left join Hosptal_Record h on p.PersonId = h.PersonId 
    left join Injury_Subject i on i.PersonId = h.PersonId 
           and h.InjuryId = i.InjuryId 
    left join Injury_Info ii on ii.InjuryId = i.InjuryId 
    group by p.PersonId; 
+0

これは完全に機能しました。本当にありがとう! – Bester

関連する問題