2015-02-12 59 views
0

我有一種情況,我需要將現有產品從MSSQL數據庫中提取爲CSV格式,以便將其導入另一個數據庫,每行都需要包含儘可能多的來自現有數據庫的信息。我認爲到目前爲止,我已經獲得了大部分我需要的查詢,但是我一直在研究如何將每個項目的多個類別合併爲一行。SQL Server:創建多個類別的逗號分隔列表..使用STUFF?還有別的嗎?

發生了什麼是我將有列出的每個類別的重複行。因此,如果將其分配給玻璃和玻璃和玻璃連接器類別,我將爲每個連接器分配一行。

我想那裏是一個單場命名,這只是逗號分隔這樣的分類:

我讀到的東西()可以做到這一點「玻璃,玻璃和玻璃連接器」,但我不能似乎得到正確的語法。 Stack上的其他例子似乎不適用於我的情況,或者我只是不知道如何將其應用於我的查詢,所需的JOIN數量也沒有幫助。

這裏是我的查詢:

SELECT 
    tblCatalog_SKUs.InternalSKU, 
    tblCatalog_Products.Name AS ParentProd, 
    tblCatalog_Categories.Name AS Category, 
    tblCatalog_SKUs_Images.Image1, 
    tblCatalog_SKUs_Images.Image2, 
    tblCatalog_SKUs_Images.Image3, 
    tblCatalog_Products.Summary, 
    tblCatalog_SKUs.Name AS optName, 
    tblCatalog_SKUs.Description AS optDesc, 
    tblCatalog_SKUs.Price, 
    tblCatalog_SKUs.Inventory, 
    tblCatalog_SKUs.Sale 
FROM tblCatalog_Products_Categories 
    INNER JOIN tblCatalog_Categories 
     ON tblCatalog_Products_Categories.CategoryID = tblCatalog_Categories.CategoryID 
    INNER JOIN tblCatalog_SKUs 
     ON tblCatalog_Products_Categories.ProductID = tblCatalog_SKUs.ProductID 
    INNER JOIN tblCatalog_SKUs_Images 
     ON tblCatalog_SKUs.SKUID = tblCatalog_SKUs_Images.SKUID 
    INNER JOIN tblCatalog_Products 
     ON tblCatalog_SKUs.ProductID = tblCatalog_Products.ProductID 

樣品結果: http://i.stack.imgur.com/Y7AIt.png

我希望有可能是這樣的在MySQL GROUP_CONCAT。

感謝您的幫助!

+0

'FOR XML PATH('')' – 2015-02-12 02:31:20

回答

1

你可以用的東西,像這樣的XML PATH做到這一點:

SELECT 
    tblCatalog_SKUs.InternalSKU, 
    tblCatalog_Products.Name AS ParentProd, 
    STUFF((
     SELECT ',' + Name 
     FROM tblCatalog_Categories 
     INNER JOIN tblCatalog_Products_Categories ON tblCatalog_Products_Categories.CategoryID = tblCatalog_Categories.CategoryID 
     WHERE tblCatalog_Products_Categories.ProductID = tblCatalog_SKUs.ProductID 
     FOR XML PATH('') 
    ), 1, 1, '') AS Category, 
    tblCatalog_SKUs_Images.Image1, 
    tblCatalog_SKUs_Images.Image2, 
    tblCatalog_SKUs_Images.Image3, 
    tblCatalog_Products.Summary, 
    tblCatalog_SKUs.Name AS optName, 
    tblCatalog_SKUs.Description AS optDesc, 
    tblCatalog_SKUs.Price, 
    tblCatalog_SKUs.Inventory, 
    tblCatalog_SKUs.Sale 
FROM tblCatalog_SKUs 
    INNER JOIN tblCatalog_SKUs_Images 
     ON tblCatalog_SKUs.SKUID = tblCatalog_SKUs_Images.SKUID 
    INNER JOIN tblCatalog_Products 
     ON tblCatalog_SKUs.ProductID = tblCatalog_Products.ProductID 

東西只是用來去除領先「」,關鍵部分是FOR XML PATH串聯的字符串。

+0

我覺得這樣做了!如果我遇到任何問題,我會通知你。非常感謝! – Ray 2015-02-12 03:14:13

相關問題