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