Sql server 2008 页码索引

Sql server 2008 页码索引,sql-server-2008,Sql Server 2008,我有一个表,其中包含供应商、类别和页面。我需要基于此表创建一个索引(就像您在目录中所做的那样) 我可以在Excel中通过循环行来实现这一点,如果供应商和类别与上面的行相同,则新页面将添加到其上方单元格的末尾: Tim's Company Code 120 Tim's Company Code 122 会导致 Tim's Company Code 120,122 当我处理1000行以下的数据时,Excel很好。我在这里的12K区域。这要花很

我有一个表,其中包含
供应商
类别
页面
。我需要基于此表创建一个索引(就像您在目录中所做的那样)

我可以在Excel中通过循环行来实现这一点,如果供应商和类别与上面的行相同,则新页面将添加到其上方单元格的末尾:

Tim's Company      Code     120
Tim's Company      Code     122
会导致

Tim's Company      Code     120,122
当我处理1000行以下的数据时,Excel很好。我在这里的12K区域。这要花很长时间。另外,我最终会重复一些我不想重复的页面实例。在
SQL
中,我可以预先消除重复项,但我不确定如何在页面上进行连接。在
SSRS
中这样做会更好吗?或者视图也会生成结果吗?

试试这个:

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;
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 ;

您可以创建一个将所有值连接到标量值的函数:

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 TN.Vendor=@Vendor AND TN.Category=@Category
    ORDER BY TN.Page
    RETURN @Pages
END
现在您可以这样使用它:

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


我只有一个表t1什么是t2?我也只使用一个名为mytable的表。t1、t2是同一表格的
表格别名。只需将mytable替换为您的表名即可。表别名的MSDN链接:我没有第二个表。我必须复制表才能使其工作吗?是的,它本质上是一个自连接,但使用一个相关子查询。如果由于数据量的原因,这不能使性能正常,请考虑在别处做这件事(比如C语言)。
VENDOR          CATEGORY        PAGES
Tims Company    Code            120,122