34,587
社区成员
发帖
与我相关
我的任务
分享
SELECT * FROM test a
WHERE EXISTS (SELECT 1 FROM
(SELECT A,NTILE(1) OVER(ORDER BY A) groups
FROM test) b WHERE a.A=b.A AND b.groups=1)
-->测试数据
IF OBJECT_ID('tab') IS NOT NULL
DROP TABLE tab
GO
CREATE TABLE tab(A INT,B VARCHAR(10))
INSERT INTO tab
SELECT '1','x1' UNION ALL
SELECT '1','x2' UNION ALL
SELECT '2','x3' UNION ALL
SELECT '2','x4' UNION ALL
SELECT '2','xxx5' UNION ALL
SELECT '3','xxx' UNION ALL
SELECT '3','xxxx'
GO
--select * from tab
-->查询
;
with
cte as (
select rn=row_number() over(partition by A order by B),* from tab
)
select * from cte where rn=1
/*
A B
1 x1
2 x3
3 xxx
*/
declare @test table(A int, B varchar(4))
insert into @test
select 1, 'x1' union
select 1, 'x2' union
select 2, 'x3' union
select 2, 'x4' union
select 2, 'xxx5' union
select 3, 'xxx' union
select 3, 'xxxx'
select A,B from
(
select row_number() over(partition by A order by A) rn,* from @test
) t
where t.rn=1
/*
A B
----------- ----
1 x1
2 x3
3 xxx
*/
SELECT a.A,b.B FROM t1 AS a
CROSS APPLY(SELECT TOP 1 B FROM t1 AS x WHERE x.A=a.A) AS b
GROUP BY a.A,b.B
ORDER BY a.A