表表达式,Substring, CharIndex, 多行数据变同一行的用法

时间:2023-03-08 23:18:24
表表达式,Substring, CharIndex, 多行数据变同一行的用法

参考:

https://www.cnblogs.com/cnki/p/9561427.html

https://www.cnblogs.com/johnwood/p/6386613.html

1.表1:

CREATE TABLE [dbo].[SQLServerInfo](
[objid] [varchar]() NULL,
[instancename] [varchar]() NULL
) ON [PRIMARY]
objid    instancename
Server1.uuu Instance1
Server2.uuu Instance1
Server3.uuu Instance1
Server4.uuu Instance2
Server5.uuu Instance3

2.表2:

CREATE TABLE [dbo].[WinServers](
[hostname] [varchar]() NULL,
[serverrole] [varchar]() NULL,
[ip] [varchar]() NULL
) ON [PRIMARY]
hostname    serverrole    ip
Server1 role1 1.1.1.1
Server2 role2 1.1.1.2
Server3 role3 1.1.1.3
Server4 role4 1.1.1.4
Server5 role5 1.1.1.5

3.查询:

 With SQLServerInfoView
as
(
select a.[instancename],b.[serverrole],b.[ip]
from [SQLServerInfo] a
left join winservers b on substring(a.objid,,charindex('.',a.objid,))=b.hostname
) select [instancename],
[serverrole] = (
stuff(
(select ',' + [serverrole] from SQLServerInfoView where [instancename] = A.[instancename] for xml path('')),
,
,
''
)
),
[ip] = (
stuff(
(select ',' + [ip] from SQLServerInfoView where [instancename] = A.[instancename] for xml path('')),
,
,
''
)
)
from SQLServerInfoView as A group by [instancename]