在SQL Server中按表中的一个值进行分组

时间:2019-01-14 21:31:07

标签: sql sql-server tsql

我有一个包含以下数据的表,并尝试按进行分组,但没有获得所需的数据。

create table #test 
( 
     id int, 
     value int, 
     code int, 
     info varchar(20)  
)

insert into #test
values (1234, 7666, 1, '1stfail'),
       (1234, 7665, 2, '2ndfail'),
       (1234, 7664, 3, '3rdfail'),
       (2434, 8777, 1, '1stfail')

select id, value, code, min(info)  
from #test  

我得到如下结果

enter image description here

我想要这样的结果

enter image description here

3 个答案:

答案 0 :(得分:4)

您可以使用CASE并仅在row_number()等于1时输出ID。

SELECT CASE
         WHEN row_number() OVER (PARTITION BY id
                                 ORDER BY code) = 1 THEN
           id
       END id,
       value,
       code,
       info 
       FROM #test;

db<>fiddle

答案 1 :(得分:1)

您需要使用LAG才能实现此目的。 LAG前进到下一行以获取列的值。

select 
  case when idNew = id then null else id end idCol, 
  value, code, info 
from (
   SELECT id, LAG(id) OVER(Order by id) idNew, code, value, info from #test
) as t

答案 2 :(得分:1)

您需要一个条件,将ID与每个组的最大值进行比较:

select 
  case 
    when value = (select max(value) from #test where id = t.id) then t.id
    else null
  end as id,
  value, 
  code,
  info
from #test as t
order by t.id, t.value desc, t.code

请参见demo