Как получить каждую запись с некоторым условием - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть следующие данные:

DECLARE @temp TABLE (
         ID int  
    ,sn varchar(200)
    ,comment varchar(2000)
    ,rownumber int
    )
insert into @temp values(1,'sn1',NULL,1)
insert into @temp values(2,'sn1','aaa',2)
insert into @temp values(3,'sn1','bbb',3)
insert into @temp values(4,'sn1',NULL,4)
insert into @temp values(5,'sn2',NULL,1)
insert into @temp values(6,'sn2',NULL,2)
insert into @temp values(7,'sn2',NULL,3)

select * from @temp

И я хочу вывести вот так:

2   sn1 aaa  2
5   sn2 NULL 1

тот же sn, если комментарий имеет значение, получите запись этого более низкого числа. Для sn1, есть две записи со значением комментария, поэтому здесь, получить запись с rownumber = 2

Если комментарий не имеет значения, получить запись нижнего числа. Для sn2 получите запись с rownumber = 1

Могу ли я знать, как написать этот SQL?

1 Ответ

0 голосов
/ 16 апреля 2019

Это запрос расстановки приоритетов.Я думаю, row_number() - самый простой метод:

select t.*
from (select t.*,
             row_number() over (partition by sn
                                order by (case when comment is not null then 1 else 2 end),
                                         rownumber
                               ) as seqnum
      from @temp t
     ) t
where seqnum = 1;

Здесь - это скрипта db <>.

...