1

この質問に似た問題があります: sql server 2008 case statement in where clause not working

同じドキュメント、SR、およびイベント テーブルがあります。

私の文書テーブル構造は次のようになります:

documentid int, 
documenttype nvarchar(50),
relationid int,
document image,
docdate date

および SR テーブル構造:

SRId int,
CustomerId int, ( related to customer table)
SRdetail,
SRDate

およびイベント テーブル:

EventId int,
SRId int, (related to SR table)
Event,
EventDate

このクエリですべての行を適切に取得しました:

Select * 
from documents d 
left join SR s on d.relationid = s.SRId 
left join Events e on d.relationid = e.EventId

しかし、私はろ過もしなければなりません。顧客ごとにすべてのドキュメントを表示する必要があるように。

だから私はこのようにクエリを実行しています:

 Select * 
 from documents d 
 left join SR s on d.relationid = s.SRId 
 left join Events e on d.relationid = e.EventId 
 where (s.CustomerId = 123 or 
        e.SRId in (select SRId from SR where CustomerId = 123))

しかし、適切な出力が得られません。差分顧客のイベントとその顧客の SR のレコードの一部を表示します。適切にフィルタリングされていないことを意味します。

「or」の代わりに「and」を試してみましたが、「and」では一部のレコードのみが表示されます。

クエリのどこかが間違っていますか?

誰でも私を助けてもらえますか?

4

4 に答える 4

0

および e.SRID=s.SRID cond は常に一致します

この上記のコメントについて、私が推測するのは次のとおりです。

Select * from documents d 
left join SR s on d.relationid = s.SRId 
left join Events e 
on d.relationid = e.EventId 
where 
(s.CustomerId = 123 AND e.SRID=s.SRID) 
于 2013-04-22T05:32:21.393 に答える
0

私の問題は解決しました。

3 つのテーブルすべてとこのクエリを使用して 1 つのビューを作成します。

  Select * from documents d left join SR s on d.relationid = s.SRId left join Events e on d.relationid = e.EventId

そして、そのビューでwhere条件を使用して、顧客ごとにデータをフィルタリングしています。

私を助けてくれてありがとう。どうもありがとう。

于 2013-04-22T07:20:23.197 に答える