假设每个组的每个所有者将有 3 行,
如果不是这种情况,那么我必须写一个 SP(现在不能做,以后会帮助你)
select [owner], [group],
parsename(Model,3) as Model1
,parsename(Model,2) as Model1
,parsename(Model,1) as Model1
from
(
select [owner], [group],
STUFF((
select '.' + model
from Table1 t2 where
t2.[owner]=t1.[owner]
and t2.[group]=t1.[group]
for xml path('')),1,1,'') Model
from Table1 t1
group by [owner],[group]
)t
SQL小提琴
更新(根据 OP 要求)
select [owner]
,case len(model)-len(replace(model,'.',''))
when 3 then parsename(replace(model,'.'+reverse(substring(reverse(model),1,charindex('.',model,1))),''),3)
when 2 then parsename(Model,3)
when 1 then parsename(Model,2)
else Model
end as Model1
,case len(model)-len(replace(model,'.',''))
when 3 then parsename(replace(model,'.'+reverse(substring(reverse(model),1,charindex('.',model,1))),''),2)
when 2 then parsename(Model,2)
when 1 then parsename(Model,1)
else ''
end as Model2
,case len(model)-len(replace(model,'.',''))
when 3 then parsename(replace(model,'.'+reverse(substring(reverse(model),1,charindex('.',model,1))),''),1)
when 2 then parsename(Model,1)
else ''
end as Model3
,case len(model)-len(replace(model,'.',''))
when 3 then reverse(substring(reverse(model),1,charindex('.',model,1)))
else ''
end as Model4
from
(
select [owner],
STUFF((
select '.' + model
from Table1 t2 where
t2.[owner]=t1.[owner]
for xml path('')),1,1,'') Model
from Table1 t1
group by [owner]
)t
SQL小提琴