【发布时间】:2010-12-13 11:24:44
【问题描述】:
我有一个 customer 表和一个 orderdetail 表 客户 id 是 orderdetail 表中的外键(我在这里简化)
orderdetail 表包含以下列 订单编号 项目 ID 客户ID 尺寸
“大小”列可以采用以下任一值 1.lr 2.MD 3.sm
所以 orderdetail 表可以有以下记录(我用逗号分隔了列)
OrderId ItemId CustomerId 大小
1,1,30,lr
1,1,30,md
1,1,30,sm
2,1,30,lr
2,1,30,md
3,1,30,lr
3,1,30,sm
4,1,30,lr
5,1,30,md
6,2,30,sm
7,3,30,md
8,3,30,lr
我想要的是一个非常有效的查询(订单详细信息表中有数百万条记录),对于给定的 customerId(在本例中为 30)具有以下输出
ItemId SizeLr SizeMd SizeSm
1 4 3 2
2 0 0 1
3 1 1 0
我使用的查询使用 3 个分组查询(“lr”、“md”和“sm”各一个),因此它扫描表 3 次。
我正在寻找一种只扫描表一次的解决方案。我认为解决方案是使用 MSSQL 2008 中的新分组集功能。但无论哪种方式,如果我希望有人可以帮助我,则使用一次扫描的解决方案。
编辑
实际输出还需要客户表和订单明细表中的其他字段。这些其他字段不依赖于聚合。
例如
ItemName ItemId SizeLr SizeMd SizeSm
A 1 4 3 2
B 2 0 0 1
C 3 1 1 0
Totals 5 4 4
如果我也能得到每个 Size 列的总数,那就太好了
【问题讨论】:
-
是订单详细信息表中的其他列,取决于大小。如果没有,请说明如何显示它们。
-
我已更新问题以包含此信息。很抱歉第一次没有说清楚。
标签: tsql sql-server-2008 grouping