考虑一个跟踪维修的系统。我有一个包含客户数据和常用ID密钥的表。我有一个第二个表,其中有一列用于显示每个id键上使用了哪种类型的修复部件以及使用了多少个。他们的定义如下:
order_information
order_id | cust_last_name
465 Smith
899 Williams
512 Johnson
345 Fenton
122 Bowles
944 Cooper
parts_usage
order_id | part_type | part_quantity
465 Part 1 5
465 Part 2 4
899 Part 1 2
899 Part 2 8
899 Part 3 6
512 Part 3 1
345 Part 2 4
345 Part 3 5
122 Part 2 3
944 Part 1 2
我想运行一个报告查询,它将返回部分内容,如下所示:
order_id | Part 1 | Part 2 | Part 3 | Total
465 5 4 9
899 2 8 6 16
512 1 1
345 4 5 9
122 3 3
944 2 2
是否可以使用查询执行此操作,以便我的报告可以显示每个维修单上使用的每个部件的数量?
如您所见,每个order_id
可以包含多个零件类型和唯一数量。我想将不同的部分类型(我总共有3个)分成3个单独的列,其总数由order_id
列出。
答案 0 :(得分:1)
select order_id, [Part 1], [Part 2], [Part 3], Total
from
(
select oi.order_id
, part_type
, part_quantity
, Total = sum(part_quantity) over (partition by oi.order_id)
from order_information oi
inner join parts_usage pu on oi.order_id = pu.order_id
) as parts
pivot
(
sum(part_quantity) for part_type in ([Part 1], [Part 2], [Part 3])
) as pvt
order by order_id
这适合我。
我也按order_id
排序了结果集;在您的示例结果中似乎没有特定的顺序,但在问题详细信息中提到了它。
您可以看到关键是将PIVOT
与SUM
聚合窗口功能结合起来。