来自子查询的 SQL 东西

Ran*_*iff 2 sql-server

我有一个返回服务和 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)

非常感谢任何帮助!!!

Rig*_*iri 5

以下查询将起作用:

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.

您可以在此处查看此查询的演示。