我有一个包含以下数据的表,并尝试按进行分组,但没有获得所需的数据。
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
我得到如下结果
我想要这样的结果
答案 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;
答案 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