怎样去除多列重复

swdmike 2009-05-31 09:55:14
比如有一个查询返回结果:
S T M
1 2 h
1 3 k
1 2 w
1 3 q
2 3 p

我只要这样,任何S和T的相同组合我只要一个结果就可以
S T M
1 2 h
1 3 k
2 3 p
...全文
182 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2009-06-01
  • 打赏
  • 举报
回复

SELECT ID=IDENTITY(INT,1,1),* INTO #TB FROM TB
SELECT S ,T ,M, N, X FROM #TB T1 WHERE NOT EXISTS(SELECT 1 FROM #TB WHERE T1.S=S AND T1.T=T AND T1.ID>ID)

tengjian1981 2009-06-01
  • 打赏
  • 举报
回复

2005语法



IF OBJECT_ID('LI') IS NOT NULL
DROP TABLE LI

CREATE TABLE LI (S INT ,T INT,M VARCHAR(10),N VARCHAR(10),P VARCHAR(10))

INSERT INTO LI (S,T,M,N,P)
SELECT 1, 2, 'h', 'a','b' UNION ALL
SELECT 1, 3, 'k', 'b','c' UNION ALL
SELECT 1, 2, 'w', 'd','e' UNION ALL
SELECT 1, 3, 'q', 'f','g' UNION ALL
SELECT 2, 3, 'p', 'a','b'



WITH TLI AS
(SELECT ROW_NUMBER() OVER(ORDER BY S,T) RID, S,T,M,N,P FROM LI )

Select A.S,A.T,A.M,A.N,A.P from TLI A where not exists(select 1 from TLI where S=A.S AND T =A.T and RID<A.RID)



zxdouzx 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 swdmike 的回复:]
我问的太简单了,如果是多列呢
S T M N X
1 2 h a d
1 3 k s d
1 2 w d j
1 3 q x t
2 3 p b e

我只要这样,任何S和T的相同组合我只要一个结果就可以
S T M N X
1 2 h a d
1 3 k s d
2 3 p b e

关键是列M,N,X的值是对应的,那应该怎么办
[/Quote]
这个问题应该是我们问你吧 关键是看你想要什么样的结果
JonasFeng 2009-05-31
  • 打赏
  • 举报
回复
 

IF OBJECT_ID('LI') IS NOT NULL
DROP TABLE LI

CREATE TABLE LI (S INT ,T INT,M VARCHAR(10))
INSERT INTO LI (S,T,M)
SELECT 1, 2, 'h' UNION ALL
SELECT 1, 3, 'k' UNION ALL
SELECT 1, 2, 'w' UNION ALL
SELECT 1, 3, 'q' UNION ALL
SELECT 2, 3, 'p'

--查询结果
--方法一
SELECT S,T,MIN(M) M FROM LI GROUP BY S,T
--方法二
;WITH TLI AS
(SELECT ROW_NUMBER() OVER(ORDER BY S,T) RID, S,T,M FROM LI )

Select A.S,A.T,A.M from TLI A where not exists(select 1 from TLI where S=A.S AND T =A.T and RID<A.RID)


/*结果、
S T M
1 2 h
1 3 k
2 3 p
*/
htl258_Tony 2009-05-31
  • 打赏
  • 举报
回复
if object_id('[tb]') is not null drop table [tb] 
go
create table [tb]([S] int,[T] int,[M] varchar(10))
insert [tb] select 1,2,'h'
union all select 1,3,'k'
union all select 1,2,'w'
union all select 1,3,'q'
union all select 2,3,'p'

select * from tb t where m in(select top 1 m from tb where s=t.s and t=t.t order by m)
/*
S T M
----------- ----------- ----------
1 2 h
1 3 k
2 3 p

(3 行受影响)
*/
Liyingyue_FFS 2009-05-31
  • 打赏
  • 举报
回复
7楼的句子等同于select s,t,min(m) as m from tb group by s,t order by s,t
htl258_Tony 2009-05-31
  • 打赏
  • 举报
回复
if object_id('[tb]') is not null drop table [tb] 
go
create table [tb]([S] int,[T] int,[M] varchar(10))
insert [tb] select 1,2,'h'
union all select 1,3,'k'
union all select 1,2,'w'
union all select 1,3,'q'
union all select 2,3,'p'

select * from tb t where not exists(select 1 from tb where s=t.s and t=t.t and m<t.m)
/*
S T M
----------- ----------- ----------
1 2 h
1 3 k
2 3 p

(3 行受影响)
*/
xiequan2 2009-05-31
  • 打赏
  • 举报
回复
select * from tb a where not exists(select 1 from tb where s=a.s and t=a.t and m<a.m)
mybelta2 2009-05-31
  • 打赏
  • 举报
回复
select s,t,max(m) as m from tb group by s,t order by s,t

select s,t,min(m) as m from tb group by s,t order by s,t
mybelta2 2009-05-31
  • 打赏
  • 举报
回复
M列不相同,你要哪列呢????????????????????????
sdhdy 2009-05-31
  • 打赏
  • 举报
回复

select s,t,m=max(m) from tb group by s,t order by s,t

select s,t,m=min(m) from tb group by s,t order by s,t
xxyping 2009-05-31
  • 打赏
  • 举报
回复
select S,T,M from temp group by S,T
ks_reny 2009-05-31
  • 打赏
  • 举报
回复

select S,T,max(M) M from temp group by S,T
-----or
select S,T,min(M) M from temp group by S,T
xmycl008 2009-05-31
  • 打赏
  • 举报
回复
select S,T,M from temp group by S,T,M
  • 打赏
  • 举报
回复
select *
from temp group by S,T
order by S
swdmike 2009-05-31
  • 打赏
  • 举报
回复
我问的太简单了,如果是多列呢
S T M N X
1 2 h a d
1 3 k s d
1 2 w d j
1 3 q x t
2 3 p b e

我只要这样,任何S和T的相同组合我只要一个结果就可以
S T M N X
1 2 h a d
1 3 k s d
2 3 p b e

关键是列M,N,X的值是对应的,那应该怎么办

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧