任何人都可以幫助我弄清楚我在做這個查詢有什麼問題。我試圖從表中包含發送給客戶端的電子郵件的一些記錄與電子郵件的狀態。我需要消除狀態爲已發送(1)和退回(0)的所有EmailId。除了這兩種狀態以外的任何情況均視爲已交付(4)。因此,輸出僅包含EmailId,狀態爲Delivery(4),表示狀態爲1和0的所有EmailId。在下面的示例中,我也應該看到EmailId 4,狀態爲DeliveredT-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
我很困惑。這似乎是一個非常簡單的要求,但帶有不必要的複雜解決方案。您有多個SELECT語句返回三個單獨的結果集。如果您只是試圖過濾出0和1個狀態,那麼您已經在第一個SELECT查詢中這樣做了(除了將這些行插入臨時表中,因此您從不會看到它們)。 –
@ Boyd,我剛剛擺脫了我有的額外選擇語句。我試圖消除任何具有0和1 statusIds的EmaiId。除了那些應該在一列中顯示EmailId和狀態交付(4) )在下一列(沒有重複EmailIds)。我沒有看到EmailId 4與我的聚合查詢 –
啊,我明白了。您沒有看到EmailID 4的原因是因爲您使用WHERE e.StatusId NOT IN(1,0)進行過濾。這是一個OR語句,基本上說「statusID不是1或0」。我會發佈一個答案。 –