这不是很漂亮,但我想这样的作品:
-- Set up temp table and test data
create table #values
(
uniqueID varchar(100),
value int
)
insert into #values
select 'name1', 110
union
select 'name1', 111
union
select 'name1', 112
union
select 'name1', 113
union
select 'name1', 120
union
select 'name1', 121
union
select 'name1', 130
union
select 'name1', 131
union
select 'name2', 110
union
select 'name2', 111
union
select 'name2', 112
union
select 'name2', 113
union
select 'name2', 114
union
select 'name2', 120
union
select 'name2', 130
union
select 'name2', 131
union
select 'name2', 132
go
-- Create CTE to add '@' to the last value in each series
with results (uniqueId, [value])
as
(
select distinct
v1.uniqueID
,case when v2.[value] is null then convert(varchar,v1.[value]) + '@' else convert(varchar,v1.[value]) end as [value]
from #values v1
left join #values v2 on v1.uniqueID = v2.uniqueID and v2.[value] > v1.[value] and v1.[value]/10 = v2.[value]/10
)
-- Return STUFFed final string (using reverse to remove trailing '@' without repeating code)
select
uniqueId
,reverse(stuff(reverse(replace(stuff((select distinct ',' + [value] from results r2 where r1.uniqueId = r2.uniqueId for xml path ('')),1,1,''),'@,','@')),1,1,'')) as [value]
from results r1
drop table #values
结果:
/-----------------------------------------------\
|uniqueId | value |
|---------|-------------------------------------|
| name1 | 110,111,112,[email protected],[email protected],131 |
| name1 | 110,111,112,[email protected],[email protected],131 |
| name1 | 110,111,112,[email protected],[email protected],131 |
| name1 | 110,111,112,[email protected],[email protected],131 |
| name1 | 110,111,112,[email protected],[email protected],131 |
| name1 | 110,111,112,[email protected],[email protected],131 |
| name1 | 110,111,112,[email protected],[email protected],131 |
| name1 | 110,111,112,[email protected],[email protected],131 |
| name2 | 110,111,112,113,[email protected]@130,131,132 |
| name2 | 110,111,112,113,[email protected]@130,131,132 |
| name2 | 110,111,112,113,[email protected]@130,131,132 |
| name2 | 110,111,112,113,[email protected]@130,131,132 |
| name2 | 110,111,112,113,[email protected]@130,131,132 |
| name2 | 110,111,112,113,[email protected]@130,131,132 |
| name2 | 110,111,112,113,[email protected]@130,131,132 |
| name2 | 110,111,112,113,[email protected]@130,131,132 |
| name2 | 110,111,112,113,[email protected]@130,131,132 |
\-----------------------------------------------/
由于只有场参考调整这个奇妙的工作。谢谢! –
没问题,很高兴它为你工作 - 我敢肯定,有一种更优雅的方式! – 3N1GM4