表表達式,Substring, CharIndex, 多行數據變同一行的用法

參考:html

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

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

 

1.表1:3d

CREATE TABLE [dbo].[SQLServerInfo](
    [objid] [varchar](50) NULL,
    [instancename] [varchar](50) NULL
) ON [PRIMARY]

 

objid    instancename
Server1.uuu    Instance1
Server2.uuu    Instance1
Server3.uuu    Instance1
Server4.uuu    Instance2
Server5.uuu    Instance3
View Code

 

2.表2:code

CREATE TABLE [dbo].[WinServers](
    [hostname] [varchar](50) NULL,
    [serverrole] [varchar](50) NULL,
    [ip] [varchar](50) 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
View Code

 

3.查詢:server

 With SQLServerInfoView
 as 
 (
  select a.[instancename],b.[serverrole],b.[ip]
  from [SQLServerInfo] a
  left join winservers b on substring(a.objid,0,charindex('.',a.objid,0))=b.hostname
 )

select [instancename],
    [serverrole] = (
        stuff(
            (select ',' + [serverrole] from SQLServerInfoView where [instancename] = A.[instancename] for xml path('')),
            1,
            1,
            ''
        )
    ),
    [ip] = (
        stuff(
            (select ',' + [ip] from SQLServerInfoView where [instancename] = A.[instancename] for xml path('')),
            1,
            1,
            ''
        )
    )
from SQLServerInfoView as A group by [instancename]
View Code
相關文章
相關標籤/搜索