Sql server 多列去重复值,相同的只显示一条数据,求指点!

lester19872007 深圳市残友软件有限公司 项目经理  2010-10-09 02:41:29

如上图,HeadersNo ,MachineNo,Description ,如果有行的这三列相同,那么这三列只需要显示一行数据。
请指点一下该怎么做!!
...全文
2623 26 点赞 打赏 收藏 举报
写回复
26 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yuhuiwqvb 2010-10-09
mark!!!!
崇拜高手。。。。。
  • 打赏
  • 举报
回复
lester19872007 2010-10-09
[Quote=引用 23 楼 zouyx317 的回复:]
和上面的方法思路差不多
很笨的方法,Sql Server 2000

SQL code


Set nocount on
go

Create Table #t
(col1 varchar(15),
col2 varchar(15),
col3 varchar(15),
col4 varchar(15),
col6 varchar(15)
)
go

i……
[/Quote]

在此感谢SQL区的各位热心的回帖,谢谢了!准备结贴!
  • 打赏
  • 举报
回复
SQLCenter 2010-10-09
[Quote=引用 19 楼 lester19872007 的回复:]
这位朋友,可否问一下怎么写宏? 指点一下谢谢!只要能实现这样的效果就行!
[/Quote]

这个问题范围太大,zsh0809的代码已经可以解决问题,Excel连接数据库查询,数据就能展现出来了。
  • 打赏
  • 举报
回复
lester19872007 2010-10-09
[Quote=引用 21 楼 zsh0809 的回复:]
引用 19 楼 lester19872007 的回复:

引用 11 楼 sqlcenter 的回复:
引用 7 楼 lester19872007 的回复:

引用 3 楼 sqlcenter 的回复:
Excel
筛选/忽略重复项
这个只是一列重复还不行,必须是三列都相同才可以忽略!!


是Excel还是SQL?Excel写宏把相同的清了。

这位朋友,可否问一下怎么……
[/Quote]
呵呵 谢谢了 这位朋友!
  • 打赏
  • 举报
回复
zouyx317 2010-10-09
和上面的方法思路差不多
很笨的方法,Sql Server 2000


Set nocount on
go

Create Table #t
(col1 varchar(15),
col2 varchar(15),
col3 varchar(15),
col4 varchar(15),
col6 varchar(15)
)
go

insert into #t
Select 'aa','bb','cc','dd','ee'
union all select 'aa','bb','cc','ff','gg'
union all select 'aa','bb','cc','gg','rr'
union all select '11','22','33','44','55'
union all select '11','22','33','12s4','asdf55'
union all select '11','232','33','44','55'
go

Select * from #t
go


Select *,idx=0 into #t2 from #t
go


select col1,col2,col3, idx = identity(int, 1, 1) into #grp from #t
group by col1,col2,col3
go


declare @i int, @gid int

select @i = 1,@gid = 0

update T2 set @i = Case when P.idx = @gid then @i + 1 else 1 end, T2.idx = @i, @gid = P.idx
from #t2 T2
inner join #grp P on T2.col1=P.col1 and T2.col2=P.col2 and T2.col3 = P.col3


Select col1 = case T2.idx when 1 then T2.col1 else ''end ,col2 = case T2.idx when 1 then T2.col2 else ''end,
col3 = case T2.idx when 1 then T2.col3 else ''end, col4, col6
from #t2 T2
inner join #grp P on T2.col1=P.col1 and T2.col2=P.col2 and T2.col3 = P.col3


drop table #grp

drop table #t2

drop table #t

col1 col2 col3 col4 col6
--------------- --------------- --------------- --------------- ---------------
aa bb cc dd ee
aa bb cc ff gg
aa bb cc gg rr
11 22 33 44 55
11 22 33 12s4 asdf55
11 232 33 44 55

col1 col2 col3 col4 col6
--------------- --------------- --------------- --------------- ---------------
aa bb cc dd ee
ff gg
gg rr
11 22 33 44 55
12s4 asdf55
11 232 33 44 55

  • 打赏
  • 举报
回复
zsh0809 2010-10-09
[Quote=引用 19 楼 lester19872007 的回复:]

引用 11 楼 sqlcenter 的回复:
引用 7 楼 lester19872007 的回复:

引用 3 楼 sqlcenter 的回复:
Excel
筛选/忽略重复项
这个只是一列重复还不行,必须是三列都相同才可以忽略!!


是Excel还是SQL?Excel写宏把相同的清了。

这位朋友,可否问一下怎么写宏? 指点一下谢谢!只要能实现这样的效果就行!
[/Quote]
到Excel中先录制一段宏,然后用vba参考试着写写。
  • 打赏
  • 举报
回复
zsh0809 2010-10-09
[Quote=引用 17 楼 lester19872007 的回复:]

引用 15 楼 wkc168 的回复:
引用楼主 lester19872007 的回复:
如上图,HeadersNo ,MachineNo,Description ,如果有行的这三列相同,那么这三列只需要显示一行数据。
请指点一下该怎么做!!


SQL code

select t.*
from (select a.*,
row_number() over(partitio……
[/Quote]
一些函数多用几次就知道了,慢慢来
  • 打赏
  • 举报
回复
lester19872007 2010-10-09
[Quote=引用 11 楼 sqlcenter 的回复:]
引用 7 楼 lester19872007 的回复:

引用 3 楼 sqlcenter 的回复:
Excel
筛选/忽略重复项
这个只是一列重复还不行,必须是三列都相同才可以忽略!!


是Excel还是SQL?Excel写宏把相同的清了。
[/Quote]
这位朋友,可否问一下怎么写宏? 指点一下谢谢!只要能实现这样的效果就行!
  • 打赏
  • 举报
回复
zsh0809 2010-10-09
[Quote=引用 16 楼 lester19872007 的回复:]

引用 12 楼 zsh0809 的回复:
是不是要这样的?

SQL code
CREATE TABLE #tp
(
headerNo VARCHAR(10),
machineNO VARCHAR(10),
descrption nVARCHAR(20),
artNo VARCHAR(20),
qty INT ,
repartno varchar……


对 是要上……
[/Quote]
兄弟,问题要是解决了,麻烦及时结贴,谢谢。
  • 打赏
  • 举报
回复
lester19872007 2010-10-09
[Quote=引用 15 楼 wkc168 的回复:]
引用楼主 lester19872007 的回复:
如上图,HeadersNo ,MachineNo,Description ,如果有行的这三列相同,那么这三列只需要显示一行数据。
请指点一下该怎么做!!


SQL code

select t.*
from (select a.*,
row_number() over(partition by HeadersNo,Machine……
[/Quote]
我当时也想了一下 SQL SERVER 2005里面的ROW_NUMBER等函数!但是没找到方案!
  • 打赏
  • 举报
回复
lester19872007 2010-10-09
[Quote=引用 12 楼 zsh0809 的回复:]
是不是要这样的?

SQL code
CREATE TABLE #tp
(
headerNo VARCHAR(10),
machineNO VARCHAR(10),
descrption nVARCHAR(20),
artNo VARCHAR(20),
qty INT ,
repartno varchar……
[/Quote]

对 是要上面的效果!!
  • 打赏
  • 举报
回复
心中的彩虹 2010-10-09
[Quote=引用楼主 lester19872007 的回复:]
如上图,HeadersNo ,MachineNo,Description ,如果有行的这三列相同,那么这三列只需要显示一行数据。
请指点一下该怎么做!!
[/Quote]

select t.*
from (select a.*,
row_number() over(partition by HeadersNo,MachineNo,Description order by getdate()) rn
from tb a) t
where t.rn=1

  • 打赏
  • 举报
回复
zsh0809 2010-10-09
结果:
headerNo   machineNO  descrption           artNo                qty         repartno             repqty
---------- ---------- -------------------- -------------------- ----------- -------------------- -----------
HD01 0101520 电池出问题 102020 2 102020 2
101010 2 202020 2
126888 2 102020 2
HD02 01012221 D电机故障 102020 2 102020 2
HD03 12312312 突然停机 102020 2 102020 2
102020 2 102020 2
HD04 12312344 皮带松了 102020 2 102020 2

(7 row(s) affected)
  • 打赏
  • 举报
回复
zsh0809 2010-10-09
是不是要这样的?
CREATE TABLE #tp
(
headerNo VARCHAR(10),
machineNO VARCHAR(10),
descrption nVARCHAR(20),
artNo VARCHAR(20),
qty INT ,
repartno varchar(20) ,
repqty INT
)

insert INTO #tp SELECT 'HD01','0101520',N'电池出问题','102020',2,'102020',2
insert INTO #tp SELECT 'HD01','0101520',N'电池出问题','101010',2,'202020',2
insert INTO #tp SELECT 'HD01','0101520',N'电池出问题','126888',2,'102020',2
insert INTO #tp SELECT 'HD02','01012221',N'D电机故障','102020',2,'102020',2
insert INTO #tp SELECT 'HD03','12312312',N'突然停机','102020',2,'102020',2
insert INTO #tp SELECT 'HD03','12312312',N'突然停机','102020',2,'102020',2
insert INTO #tp SELECT 'HD04','12312344',N'皮带松了','102020',2,'102020',2

SELECT CASE when row=1 THEN headerNo ELSE '' END headerNo,
CASE when row=1 THEN machineNO ELSE '' END machineNO,
CASE when row=1 THEN descrption ELSE '' END descrption
,artNo,qty,repartno,repqty
FROM
(
SELECT *,row_number()OVER(PARTITION BY headerNo,machineNO,descrption ORDER BY GETDATE())row
FROM #tp
)M


headerNo machineNO descrption artNo qty repartno repqty
---------- ---------- -------------------- -------------------- ----------- -------------------- -----------
HD01 0101520 电池出问题 102020 2 102020 2
101010 2 202020 2
126888 2 102020 2
HD02 01012221 D电机故障 102020 2 102020 2
HD03 12312312 突然停机 102020 2 102020 2
102020 2 102020 2
HD04 12312344 皮带松了 102020 2 102020 2

(7 row(s) affected)
  • 打赏
  • 举报
回复
SQLCenter 2010-10-09
[Quote=引用 7 楼 lester19872007 的回复:]

引用 3 楼 sqlcenter 的回复:
Excel
筛选/忽略重复项
这个只是一列重复还不行,必须是三列都相同才可以忽略!!
[/Quote]

是Excel还是SQL?Excel写宏把相同的清了。
  • 打赏
  • 举报
回复
lester19872007 2010-10-09
[Quote=引用 8 楼 kevinwen0413 的回复:]
就是想显示成图的样子?
[/Quote]对,就是要上图那样!
  • 打赏
  • 举报
回复
billpu 2010-10-09
看明白啦 是excel :) 不懂 帮顶
  • 打赏
  • 举报
回复
kevn 2010-10-09
就是想显示成图的样子?
  • 打赏
  • 举报
回复
lester19872007 2010-10-09
[Quote=引用 3 楼 sqlcenter 的回复:]
Excel
筛选/忽略重复项
[/Quote]这个只是一列重复还不行,必须是三列都相同才可以忽略!!
  • 打赏
  • 举报
回复
lester19872007 2010-10-09
[Quote=引用 4 楼 billpu 的回复:]
其他列数据怎么办?就不要了?
[/Quote]
其他列当然要了,只是把前面三列的重复值去掉只显示一条,后面其他列保留
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-09 02:41
社区公告
暂无公告