2017-12-18 307 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

我做了一個更新。 –