2016-11-22 7 views
1

レポートファイル、従業員ファイル、およびレポート配布ファイルを含むクエリを作成しています。従業員の名前の一覧があります。それぞれの名前はそれぞれのレポート名になり、0の場合はレポートが表示され、1の場合はレポートが表示されます。ユーザごとに SQLクロス結合とIIF(ISNULL) - 期待どおりに動作しません

select distinct ut.user_name 
     , ut.emailaddress 
     , r.name 
     , iif(ISNULL(rd.employeeid,0)=0, 0,1) AS currentreport 
from US_usertable ut 
cross join DL_reports r 
left outer join DL_Reptdistrib rd 
    on ut.employeeID = rd.employeeid 

は、私がレポートの完全なセットを取得する - ので、クロス作品に参加する - しかし、どちらか、彼らはすべてのレポートのすべてのレポートのための1または0を取得します。なぜこのクエリが機能していないのか分かりません。あなたができるなら親切に助けてください。前もって感謝します!!!

+1

データを見ることなく、わかりにくいです。 –

+0

クロス結合ではなく、左結合が必要です。 – Hogan

答えて

4

私はあなたがレポートに結合条件が欠けていると思う:

select ut.user_name, ut.emailaddress, r.name, 
     (case when rd.employeeid is null then 0 else 1 end) as currentreport 
from US_usertable ut cross join 
    DL_reports r left outer join 
    DL_Reptdistrib rd 
    on ut.employeeID = rd.employeeid and r.?? = rd.??; 

??レポートを識別するために使用されるフィールドです。私はそれがreportIDだと思います。

注:標準SQLに構文を変更しました。 IIF()はMS Accessとの互換性のためにSQL Serverに含まれています(MicrosoftがANSI標準caseをMS Accessに入れていない理由は私のものです)。また、ISNULL()をANSI標準IS NULLに置き換えました。

+0

ありがとうございました!!!魅力的なように働いた:)私のコードを更新してくれてありがとう! – Missy

+0

Gordon - DL_reportsをDL-Reptdistribの内部結合にしないで、基本的にUS_usertableの左結合を行いませんか? – Hogan

+0

@Hogan。 。 。いいえ。「クロス結合」は、OPが望むすべての行(ユーザーとレポートのすべての組み合わせ)を生成します。 'left join'は、現在存在するものに関する情報を追加します。 –