2017-12-18 305 views
0

我有这个基本查询,带回配置信息。每个MatrixCellID是一张单独的门票,每个门票可以有多个StatisticalGroupCodesStatisicalGroupDescriptions。目前每个MatrixCellID多次出现,因为其多个StatisicalGroupCodes。我希望“代码”和“描述”列以逗号分隔的一列显示。SQL Server 2016 - 东西/ XML路径

这是我的查询:

select 
    cmc.MatrixSheetId, 
    CMS.MatrixSheetName, 
    cmc.MatrixCellId, 
    CMC.Price, 
    CMC.PriceListId, 
    CPL.PriceListName, 
    CPT.Description as PriceTable, 
    case when CMC.Code <> '' then cmc.code else 'EMPTY' end AS TicketCode, 
    case when CMC.Name <> '' then cmc.name else 'EMPTY' END AS TicketName, 
    case when CMC.Description <> '' then cmc.description else 'EMPTY' END AS TicketDescription, 
    case when CMC.Description2 <> '' then cmc.description2 else 'EMPTY' end AS AdditionalTicketDescription, 
    CASE WHEN CMCI.AccountMandatory = 1 THEN 'YES' else 'NO' end AS AccountMandatory, 
    CASE WHEN CDC.Description IS NULL THEN 'NONE' ELSE CDC.Description END AS AccountCategory, 
    CDT.DocTemplateName AS PrintTemplate, 
    CTP.Description as TaxPackage, 
    CT.TaxName, 
    CASE when CMC.PriceType = 0 then 'Fixed' else 'Variable' end as PriceType, 
    CCC.CostCenterDescription, 
    CCC.CostCenterCode, 
    CCC.CostCenterAK, 
    CSG.StatisticalGroupCode, 
    CSG.StatisticalGroupDescription 
from 
CNF_MatrixCell CMC 
inner join CNF_MatrixSheet CMS on CMC.MatrixSheetId = CMS.MatrixSheetId 
inner join CNF_PriceList CPL on CMC.PriceListId = CPL.PriceListId 
INNER JOIN CNF_MatrixCellInfo CMCI on CMC.MatrixCellId = CMCI.MatrixCellId 
left join CNF_DmgCategory CDC on CMCI.AccountDmgCatId = CDC.DmgCategoryId 
left join CNF_DocTemplate CDT on CMC.DocTemplateId = CDT.DocTemplateId 
LEFT join CNF_TaxPackage CTP on CMC.TaxPackageId = CTP.TaxPackageId 
LEFT join CNF_Tax2Package CT2P on CTP.TaxPackageId = CT2P.TaxPackageId 
LEFT JOIN CNF_Tax CT on CT2P.TaxId = CT.TaxId 
LEFT JOIN CNF_CostCenter_Validity CCCV on CMC.MatrixCellId = cccv.MatrixCellId 
LEFT JOIN CNF_CostCenter CCC on CCCV.CostCenterId = CCC.CostCenterId 
inner join CNF_PriceTable CPT on CMC.PriceTableId = CPT.PriceTableId 
LEFT JOIN CNF_StatisticalGroupValidity CSGV on CMC.MatrixCellId = CSGV.MatrixCellId 
LEFT JOIN CNF_StatisticalGroup CSG on CSGV.StatisticalGroupId = CSG.StatisticalGroupId 
WHERE CMC.Enabled = 1 
    AND CCC.Enabled = 1 
    AND CPT.Enabled = 1 
    AND CMS.Enabled = 1 
ORDER BY 
    CMS.MatrixSheetId, 
    CMC.MatrixCellId, 
    CMC.Code 

我曾尝试使用的东西和XML路径,但不能让它正常工作与我的联接。 预先感谢您。

+0

没有看到你的尝试和预期结果的例子,我想你应该在'SELECT'列表中为逗号分隔的值尝试相关的子查询。 –

回答

0

您可以使用它。

select 
    cmc.MatrixSheetId, 
    CMS.MatrixSheetName, 
    cmc.MatrixCellId, 
    CMC.Price, 
    CMC.PriceListId, 
    CPL.PriceListName, 
    CPT.Description as PriceTable, 
    case when CMC.Code <> '' then cmc.code else 'EMPTY' end AS TicketCode, 
    case when CMC.Name <> '' then cmc.name else 'EMPTY' END AS TicketName, 
    case when CMC.Description <> '' then cmc.description else 'EMPTY' END AS TicketDescription, 
    case when CMC.Description2 <> '' then cmc.description2 else 'EMPTY' end AS AdditionalTicketDescription, 
    CASE WHEN CMCI.AccountMandatory = 1 THEN 'YES' else 'NO' end AS AccountMandatory, 
    CASE WHEN CDC.Description IS NULL THEN 'NONE' ELSE CDC.Description END AS AccountCategory, 
    CDT.DocTemplateName AS PrintTemplate, 
    CTP.Description as TaxPackage, 
    CT.TaxName, 
    CASE when CMC.PriceType = 0 then 'Fixed' else 'Variable' end as PriceType, 
    CCC.CostCenterDescription, 
    CCC.CostCenterCode, 
    CCC.CostCenterAK, 
    STUFF(StatGrpCode.StatGroupCodes,1,1,'') StatGroupCodes, 
    STUFF(StatGrpCodeDesc.StatGroupDescription,1,1,'') StatGroupDescription 
from 
    CNF_MatrixCell CMC 
    inner join CNF_MatrixSheet CMS on CMC.MatrixSheetId = CMS.MatrixSheetId 
    inner join CNF_PriceList CPL on CMC.PriceListId = CPL.PriceListId 
    INNER JOIN CNF_MatrixCellInfo CMCI on CMC.MatrixCellId = CMCI.MatrixCellId 
    left join CNF_DmgCategory CDC on CMCI.AccountDmgCatId = CDC.DmgCategoryId 
    left join CNF_DocTemplate CDT on CMC.DocTemplateId = CDT.DocTemplateId 
    LEFT join CNF_TaxPackage CTP on CMC.TaxPackageId = CTP.TaxPackageId 
    LEFT join CNF_Tax2Package CT2P on CTP.TaxPackageId = CT2P.TaxPackageId 
    LEFT JOIN CNF_Tax CT on CT2P.TaxId = CT.TaxId 
    LEFT JOIN CNF_CostCenter_Validity CCCV on CMC.MatrixCellId = cccv.MatrixCellId 
    LEFT JOIN CNF_CostCenter CCC on CCCV.CostCenterId = CCC.CostCenterId 
    inner join CNF_PriceTable CPT on CMC.PriceTableId = CPT.PriceTableId 
    LEFT JOIN CNF_StatisticalGroupValidity CSGV on CMC.MatrixCellId = CSGV.MatrixCellId 
    OUTER APPLY 
     (SELECT ', ' + CSG.StatisticalGroupCode 
      FROM CNF_StatisticalGroup CSG 
      WHERE CSGV.StatisticalGroupId = CSG.StatisticalGroupId FOR XML PATH('')) StatGrpCode (StatGroupCodes) 
    OUTER APPLY 
     (SELECT ', ' + CSG.StatisticalGroupDescription 
      FROM CNF_StatisticalGroup CSG 
      WHERE CSGV.StatisticalGroupId = CSG.StatisticalGroupId FOR XML PATH('')) StatGrpCodeDesc (StatGroupDescription) 
WHERE CMC.Enabled = 1 
    AND CCC.Enabled = 1 
    AND CPT.Enabled = 1 
    AND CMS.Enabled = 1 

ORDER BY 
    CMS.MatrixSheetId, 
    CMC.MatrixCellId, 
    CMC.Code 
+0

对不起,我还不够清楚!我试图找出如何在这里复制我的结果,然后我会再次发送消息 – RachelShaw

+0

我希望看到的是每个Matrix Cell ID一行,代码在一列中,而在另一列中的代码描述由例如逗号:MatrixCellID 3181; StatGroupCodes事件,TOL,PUBEV; StatGroupDescription所有活动,伦敦塔,公共活动。现在我得到3行这个信息。谢谢 – RachelShaw

+0

我做了一个更新。 –