誰でも私がこのクエリーで間違っていることを理解できます。 Sent(1)とBounced(0)のステータスを持つすべてのEmailIdを削除します。これら2つのステータス以外のものはDelivered(4)とみなされます。出力には、ステータスが1と0でないEmailIdのステータスがDelivered(4)であるEmailIdのみが含まれています。下の例では、EmailId 4も配信ステータスがT-SQL集約クエリ
です。 up.Reallyサンプルセットは、あなたたちは
create table #status
(
Id int,
Name varchar(100)
)
insert into #status (Id, Name)
values (0, 'Bounced'), (1, 'Sent'), (2, 'Clicked'),
(3, 'Opened'), (4, 'Delivered')
create table #email
(
EmailId int ,
Email varchar(100),
StatusId int
)
insert into #email (EmailId, email, StatusId)
values (1, '[email protected]', 1), (1, '[email protected]', 0),
(2, '[email protected]', 1), (2, '[email protected]', 2),
(2, '[email protected]', 3), (3, '[email protected]', 1),
(3, '[email protected]', 2), (3, '[email protected]', 3),
(4, '[email protected]', 1)
select
e.EmailId
into
#temp
from
#email e
inner join #status st
on st.Id = e.StatusId
where
(e.StatusId not in (1,0))
group by
e.EmailId
drop table #temp
drop table #email
drop table #status
私はあなたが達成しようとしているものによって混乱しています。これはかなり簡単な要求だと思われますが、不必要に複雑な解決策があります。 3つの別々の結果セットを返す複数のSELECT文があります。 0と1のステータスをフィルタリングしようとしているだけの場合は、最初のSELECTクエリですでにその処理を行っています(一時テーブルにこれらの行を挿入しているため、表示されません)。 –
@ Boyd、私はちょうど私が持っていた余分な選択ステートメントを取り除いた。私は0と1両方のstatusIds.Enys.EnyIをすべてのEmaiIdを排除しようとしている1つの列にEmailIdと表示される必要があります)(次の列に重複するEmailIdsはありません)。私のaggreateクエリでEmailId 4が表示されません –
ああ、そうです。 EmailID 4が表示されない理由は、WHERE e.StatusId NOT IN(1,0)を使用してフィルタリングするためです。これはORステートメントであり、本質的に「statusIDが1または0ではない」と言っています。私は答えを投稿します。 –