【发布时间】:2018-04-17 05:19:14
【问题描述】:
我目前正在编写一个 SQL 脚本 - 包含一个业务术语和所有相关的同义词。它所做的是创建多行(因为有多个同义词(可以有其他列也可以是多个值。
我要做的是为每个业务术语创建一行,并连接值(,分隔),以便我只为每个业务术语获取一个行项目。
目前我的 SQL 脚本是:
SELECT dbo.TblBusinessTerm.BusinessTerm, dbo.TblBusinessTerm.BusinessTermLongDesc,
dbo.TblBusinessTerm.DomainCatID, dbo.TblSystem.SystemName,
dbo.TblDomainCat.DataSteward, dbo.TblDomainCat.DomainCatName,
dbo.TblField.GoldenSource, dbo.TblField.GTS_table,
dbo.TblTableOwner.TableOwnerName, dbo.TblBusinessSynonym.Synonym
FROM dbo.TblTableOwner INNER JOIN
dbo.TblBusinessTerm INNER JOIN
dbo.TblBusinessSynonym ON dbo.TblBusinessTerm.BusinessTermID = dbo.TblBusinessSynonym.BusinessTermID INNER JOIN
dbo.TblField ON dbo.TblBusinessTerm.BusinessTermID = dbo.TblField.BusinessTermID INNER JOIN
dbo.TblSystem INNER JOIN
dbo.TblTable ON dbo.TblSystem.SystemID = dbo.TblTable.SystemID ON dbo.TblField.TableID = dbo.TblTable.TableID INNER JOIN
dbo.TblDomainCat ON dbo.TblBusinessTerm.DomainCatID = dbo.TblDomainCat.DomainCatID ON dbo.TblTableOwner.TableOwnerID = dbo.TblDomainCat.DataSteward
有没有一种简单的方法可以考虑性能 - 我是 SQL 新手。
谢谢
我已经设法创建了一个现在连接我的行的 with 语句:
With syn as (
select [BusinessTermID],
syns = STUFF((SELECT ', ' + dbo.TblBusinessSynonym.Synonym
FROM dbo.TblBusinessSynonym
WHERE [BusinessTermID] = x.[BusinessTermID]
AND dbo.TblBusinessSynonym.Synonym <> ''
FOR XML PATH ('')),1,2,'')
FROM dbo.TblBusinessSynonym AS x
GROUP BY [BusinessTermID]
)
select * from syn
但是现在我如何在上述所有链接的查询中使用它?
想用来自syn的结果替换dbo.TblBusinessSynonym.Synonym
有可以提供帮助的 SQL 2014 开发人员吗?
【问题讨论】:
-
您可能需要使用
CONCAT_WS来分隔或使用CONCAT来获取常规值。
标签: sql sql-server tsql sql-server-2014