SQL Server первым получить рейтинг? - PullRequest
0 голосов
/ 20 декабря 2011

Редактировать - повторяю мою потребность, так как два парня с гораздо большим рангом, чем я, неправильно поняли мой вопрос, поэтому мне нужно сделать это лучше ...

У меня есть таблица, подобная приведенной ниже. Мне нужно выбрать все строки для первой группы строк «sec1», где столбец «ison» равен 1. Поэтому запрос должен сначала вернуть строку «bbb», но если я установлю все строки в ison = 0, а затем сделайте строки 'ccc' ison = 1, тогда я получу две строки 'ccc' в наборе результатов. Может ли кто-нибудь помочь мне с моим званием / топ? Использование MSSQL 2008.

create table #grp ( sec1 varchar(4) , sec2 varchar(4) , ison bit )
insert into #grp values ( 'aaa' , '001' , 0 )
insert into #grp values ( 'aaa' , '002' , 0 )
insert into #grp values ( 'bbb' , '001' , 1 )
insert into #grp values ( 'ccc' , '001' , 1 )
insert into #grp values ( 'ccc' , '001' , 1 )

Select * From 
( Select 
    sec1 , 
    sec2 , 
    ison , 
    RANK() Over ( partition by sec1 order by sec1,sec2 ) as rowrank
from #grp
where ison=1
) tmp
where rowrank=1

Спасибо.

1 Ответ

2 голосов
/ 20 декабря 2011
create table #grp ( sec1 varchar(4) , sec2 varchar(4) , ison bit )
insert into #grp values ( 'aaa' , '001' , 0 )
insert into #grp values ( 'aaa' , '002' , 1 )
insert into #grp values ( 'bbb' , '001' , 1 )
insert into #grp values ( 'ccc' , '001' , 1 )
insert into #grp values ( 'ccc' , '001' , 1 )

SELECT  *
  FROM  #grp
 WHERE  sec1 = (
                    Select TOP(1) sec1
                    From 
                        ( Select 
                                sec1 , 
                                sec2 , 
                                ison , 
                                RANK() Over ( partition by sec1 order by sec1,sec2 ) as rowrank
                           from #grp
                          where ison=1
                        ) tmp
                    where rowrank=1
                    Order by sec1, Sec2
                )
...