我有一个返回服务和 ContractorID 列表的查询。我需要将这些服务填充到一个字段中,以通过 ContractorID 将它们与另一个选择语句连接起来,但我不知道如何去做。
列出服务的 Select 是“
SELECT DISTINCT SM.ContractorID,
CASE WHEN S.bitRestrictedSelection = 1
THEN S.vchDescription + '*'
ELSE S.vchDescription
END AS vchDescription
FROM tblAscServiceRegionToOperator SRTO
INNER JOIN tblServiceMatrix SM
ON SRTO.OperatorID = 12624
AND SM.ServiceRegionID = SRTO.ServiceRegionID
AND SM.bitPrimaryService = 1
INNER JOIN tblServices S
ON S.ServiceID = SM.ServiceID
Run Code Online (Sandbox Code Playgroud)
这会产生以下结果:
在示例中,对于 Contractor #16 他有 4 个服务,我需要通过加入另一个 Select 语句将它们放在一个名为 services 的字段中,我尝试了以下操作,但出现错误:
Select DISTINCT CompanyID, vchCompanyName as CompanyName,vchFIDNumber,vchPrimContactName, vchPrimContactEmail
,stuff((','
SELECT DISTINCT
SM.ContractorID,
CASE WHEN S.bitRestrictedSelection = 1
THEN S.vchDescription + '*'
ELSE S.vchDescription
END AS vchDescription
FROM tblAscServiceRegionToOperator SRTO
INNER JOIN tblServiceMatrix SM
ON SRTO.OperatorID = 12624
AND SM.ServiceRegionID = SRTO.ServiceRegionID
AND SM.bitPrimaryService = 1
INNER JOIN tblServices S
ON S.ServiceID = SM.ServiceID
FOR XML PATH('')
), 1, 1, '') as Services from tblCompany
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助!!!
以下查询将起作用:
SELECT SS.contractor Contractor,
STUFF((SELECT '; ' + US.vchdescription
FROM ServicesList US
WHERE US.contractor = SS.contractor
FOR XML PATH('')), 1, 1, '') [Services]
FROM ServicesList SS
GROUP BY SS.contractor
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
我创建了一个表,并在其中插入了两行,contractor = 16,以便您理解。您可以使用评论中给您的建议,将第一个 select 包装到 a 中CTE,然后STUFF在该CTE.
您可以在此处查看此查询的演示。
| 归档时间: |
|
| 查看次数: |
3806 次 |
| 最近记录: |