#sql #sql-server #tsql #window-functions
#sql #sql-server #tsql #окно-функции
Вопрос:
У меня есть запрос. Этот запрос:
select Q1.* from (
select
a.CreatedDate as KynectCreatedDate,
a.FirstName,
b.CaseStatusCode,
a.Id as ContactId,
a.Email as EmailAddress,
a.MobilePhone,
row_number() over (partition by a.Email order by b.CaseStatusCode desc) as row
from
ent.Contact_Salesforce a
left join
ent.SOMETABLE_Contact_Shared c on a.Email = c.Email
left join
ent.SOMETABLE_Case_Shared b on c.IndividualId = b.IndividualId and c.CaseNumber = b.CaseNumber
where a.Email = 'aaa@aaa.com') Q1
where Q1.row = 1
Вот что я хочу. Группа записей, которые возвращаются, как определено в предложении partition by — скажем, есть 3, которые возвращаются (номер строки 1, 2, 3). Если CaseStatusCode имеет значение «AC» для любого из них, ВЫБЕРИТЕ ЭТУ ЗАПИСЬ ИЗ ГРУППЫ. В противном случае НЕ ИМЕЕТ ЗНАЧЕНИЯ, КАКУЮ ЗАПИСЬ Я ВЫБИРАЮ. Прямо сейчас запрос просто выбирает первую запись в группе ( where Q1.row = 1
). Мне трудно понять, как это сделать. Есть идеи?
Ответ №1:
Поместите эту информацию в order by
:
row_number() over (partition by a.Email order by (case when b.CaseStatusCode 'AC' then 1 else 2 end) as row