2013-08-29 55 views
0

我有一張表,其中包含一個vendor,categorypage。我需要根據這個表創建一個索引(就像你在一個目錄中一樣)。頁號索引

我可以通過行和如果供應商和類別是一樣的上面行,新頁面被添加到細胞的上方結束循環在Excel中做到這一點:

Tim's Company  Code  120 
Tim's Company  Code  122 

會導致

Tim's Company  Code  120,122 

Excel是很好,當我處理下一個1000行。我在這裏的12K區域。這將需要永遠。另外,我結束了一些我不想要的頁面重複實例。在SQL我可以擺脫重複的前面,我不知道如何做頁面上的連接。在SSRS這樣做會更好嗎?或者視圖是否會生成結果?

回答

0

試試這個:Fiddle demo

SELECT t1.Vendor,t1.Category, 
     csvPages = REPLACE((SELECT CONVERT(VARCHAR(12),Page) AS [data()] 
          FROM mytable t2 
          WHERE t2.Vendor = t1.Vendor AND 
            t2.Category = t1.Category 
          ORDER BY t2.Vendor 
          FOR XML PATH('') 
          ), ' ', ',') 
FROM mytable t1 
GROUP BY t1.Vendor,t1.Category ; 
+0

我只有一張表t1什麼是t2? –

+0

我也只使用一個名爲mytable的表。 t1,t2是同一個表的「表別名」。只需用你的表名替換mytable。 MSDN鏈接表的別名:http://technet.microsoft.com/en-us/library/ms187455(v=sql.105).aspx – Kaf

1
DECLARE @x TABLE(vendor VARCHAR(32), category VARCHAR(32), page INT); 

INSERT @x VALUES 
('Tim''s Company','Code',120), 
('Tim''s Company','Code',122); 

SELECT vendor, category, pages = STUFF((
    SELECT ',' + CONVERT(VARCHAR(12), page) 
    FROM @x AS x2 
    WHERE x2.vendor = x.vendor AND x2.category = x.category 
    ORDER BY page 
    FOR XML PATH(''), TYPE).value('.[1]','nvarchar(max)'),1,1,'') 
FROM @x AS x 
GROUP BY vendor, category; 
+0

我沒有得到第二個表。我是否必須複製表格才能使其工作? –

+0

是的,它本質上是一個自聯接,但使用相關的子查詢。如果由於大量數據而導致性能不佳,請考慮在別處執行此操作(如在C#中)。 –

0

您可以創建一個連接所有值標值的函數:

CREATE FUNCTION [dbo].[getPages] 
(
    @Vendor varchar(100), 
    @Category varchar(50) 
) 
RETURNS VARCHAR(8000) 
AS 
BEGIN 
    DECLARE @Pages VARCHAR(8000) 
    SELECT @Pages = COALESCE(@Pages + ',','') + CAST(TN.Page AS VARCHAR) 
    FROM dbo.TableName TN 
    WHERE [email protected] AND [email protected] 
    ORDER BY TN.Page 
    RETURN @Pages 
END 

現在你可以這樣使用它:

SELECT Vendor, Category, 
     Pages=dbo.getPages(Vendor,Category) 
FROM dbo.TableName 
GROUP BY Vendor, Category 

DEMO

VENDOR   CATEGORY  PAGES 
Tims Company Code   120,122