может кто-нибудь помочь мне выяснить, что я делаю неправильно с этим запросом. Я пытаюсь отфильтровать некоторые записи из таблицы, содержащей электронные письма, отправленные клиентам со статусом электронных писем. Мне нужно устранить все почтовые индексы, которые имеют статус отправленного (1) и отскок (0). Все, кроме этих двух статусов, считается доставленным (4). Таким образом, вывод содержит только EmailId со статусом Delivered (4) для всех этих почтовых индексов, которые не имеют статусов 1 и 0. В приведенном ниже примере я также должен видеть EmailId 4 со статусом отправленногоT-Sql aggregate query
Это мой образец набор 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, я просто избавился от лишних высказываний, которые у меня были. Я пытаюсь устранить любой EmaiId, который имеет как 0, так и 1 статус. Все, кроме тех, которые должны отображаться с помощью EmailId в одной колонке и Status of Delivered (4)) в следующем столбце (Нет дубликатов EmailIds). Я не вижу EmailId 4 с моим запросом aggreate –
Ahh, я вижу. Причина, по которой вы не видите EmailID 4, состоит в том, что вы отфильтровываете ее с помощью WHERE e.StatusId NOT IN (1,0). Это инструкция OR, по существу говоря «где statusID не 1 ИЛИ 0». Я отправлю ответ. –