SQL Server - 分组依据,加入问题

时间:2016-06-17 14:45:53

标签: sql-server inner-join

我有一个订单表,其中包含以下字段:

unid是主键字段
order_reference是系统生成的递增数字
named_worker列将设置为“是”'如果订单是命名的工人订单

我有一个订单,参考' BCC-015212'并且它是一个命名的工人订单。

以下查询使用订单表中的信息并给出预期结果:

SELECT 'Order Number'=Case WHEN GROUPING(o.order_reference) = 1 Then 'Grand Total:' ELSE o.order_reference END,
'Agency'=Case WHEN GROUPING(oa.agency_name) = 1 Then 'Sub Total:' ELSE oa.agency_name END,
'Orders Raised' = COUNT(distinct o.unid),
'Named Workers' = SUM(CASE o.named_worker WHEN 'Yes' THEN 1 ELSE 0 END)
FROM orders o
Inner Join orderapplicants oa on oa.order_unid = o.unid
WHERE o.order_reference = 'BCC-015212'
Group By o.order_reference,oa.agency_name
WITH ROLLUP 
ORDER BY o.order_reference, oa.agency_name

Returned Results:
Order Number | Agency    | Orders Raised | Named Workers
Grand Total: | Sub Total:| 1             | 3
BCC-015212   | Sub Total:| 1             | 3
BCC-015212   | Agency1   | 1             | 1
BCC-015212   | Agency2   | 1             | 2

Required Results:
Order Number | Agency    | Orders Raised | Named Workers
Grand Total: | Sub Total:| 1             | 1
BCC-015212   | Sub Total:| 1             | 1
BCC-015212   | Agency1   | 1             | 1
BCC-015212   | Agency2   | 1             | 1

我希望能够通过代理商名称对此信息进行分组,该名称是一个名为orderApplicants的不同表格的列。

订购' BCC-015212'共有3个订单申请人。代理商1的1个申请人和代理商2的2个申请人。

OrderApplicant有一个名为order_unid的外键,通过unid字段链接到订单表。

如果我连接到OrderApplicants表,那么查询会在命名的工作列上给出不准确的结果:

{{1}}

我可以按照代理机构名称进行分组,但是可以从订单表中的信息(例如指定工作人员)中获取准确的信息吗?

我在rextester.com上加载了一个工作示例,请访问: http://rextester.com/SRX8309

0 个答案:

没有答案