[英]Joining issue with sql query
我们正在使用Shipworks应用程序来管理订单。 借助此工具,我们还开发了一个小型工具,该工具可帮助基于船厂数据生成不同类型的报告。
因此,我们在为客户生成销售报告方面几乎没有问题。 在此报告中,我们正在获取以下信息:
1.客户ID,BillFirstName,BillMiddleName,BillLastName,OrderTotal作为“订单”表中的总数。 2. OrderItem表中的SalePrice。 销售价格是(数量*单价)。 OrderItem表保存按特定订单订购的数量和单价的产品。 我们通过OrderID在Order和OrderItem表之间建立关系。 3. OrderCharge表中的折扣,税金和运费。 折扣是具有对应类型列值(优惠券,促销折扣,奖励,信用,促销,促销,FACEBOOK_FAN_REWARD,VOUCHER)的所有金额的总和,税收是具有对应类型列值(TAX)的金额的总和,运费是总和具有相应类型列值的金额(SHIPPING)。 我们通过OrderID在OrderCharge和Order表之间建立关系。
总的来说,我们正在针对每个客户ID提取上述数据。 我们还传递了一些商店条件和日期条件来获取数据,即订单在我们传递时属于商店,并在传递开始和结束日期时属于。
我们对上述查询为:
select derived.CustomerID, derived.BillFirstName, derived.BillMiddleName,
derived.BillLastName, SUM(oi.quantity*oi.UnitPrice) as saleprice, derived.freight,
derived.tax, sum(o.OrderTotal) as total, derived.discount
from (select o.CustomerID, o.BillFirstName, o.BillMiddleName, o.BillLastName
,SUM(oc.amount) as freight, SUM(oc2.amount) as tax, SUM(oc3.amount) as discount
from [Order] o
inner join OrderCharge oc on o.orderID = oc.orderID
and oc.[Type] = 'SHIPPING'
inner join OrderCharge oc2 on o.orderID = oc2.orderID
and oc2.Type = 'TAX'
inner join OrderCharge oc3 on o.orderID = oc3.orderID
and (oc3.Type = 'COUPON'
or oc3.Type = 'PROMOTION DISCOUNT'
or oc3.Type = 'REWARD'
or oc3.Type = 'CREDIT'
or oc3.Type = 'PROMOTION'
or oc3.Type = 'FACEBOOK_FAN_REWARD'
or oc3.Type = 'VOUCHER')
where o.StoreID IN(12005,17005,1005,20005,19005)
and (o.OrderDate between '2013-11-01 00:00:00' and '2013-12-27 23:59:00')
group by o.CustomerID, o.BillFirstName,
o.BillMiddleName, o.BillLastName) as derived
inner join [Order] o on o.CustomerID = derived.CustomerID
inner join orderItem oi on o.orderID = oi.orderID
group by derived.CustomerID, derived.BillFirstName, derived.BillMiddleName,
derived.BillLastName, derived.freight, derived.tax, derived.discount
上面的查询为我们提供了正确的数据,但未汇总折扣,运费和税金。 有人可以建议我其他解决方案,还是告诉我上述查询有什么问题?
等待回复
尝试这个:
SELECT o.CustomerID, o.BillFirstName, o.BillMiddleName, o.BillLastName,
SUM(B.saleprice) AS saleprice, SUM(A.freight) AS freight,
SUM(A.tax) AS tax, SUM(o.OrderTotal) AS total, SUM(A.discount) AS discount
FROM ORDER o
INNER JOIN (SELECT orderID,
SUM(CASE WHEN oc.TYPE = 'SHIPPING' THEN oc.amount ELSE 0 END) AS freight,
SUM(CASE WHEN oc.TYPE = 'TAX' THEN oc.amount ELSE 0 END) AS tax,
SUM(CASE WHEN oc.TYPE IN ('COUPON', 'PROMOTION DISCOUNT', 'REWARD', 'CREDIT', 'PROMOTION', 'FACEBOOK_FAN_REWARD', 'VOUCHER') THEN oc.amount ELSE 0 END) AS discount
FROM OrderCharge oc GROUP BY oc.orderID
) A ON o.orderID = A.orderID
INNER JOIN (SELECT orderID, SUM(oi.quantity * oi.UnitPrice) AS saleprice
FROM OrderItem oi GROUP BY oi.orderID
) B ON o.orderID = B.orderID
WHERE o.StoreID IN(12005,17005,1005,20005,19005) AND
o.OrderDate BETWEEN '2013-11-01 00:00:00' AND '2013-12-27 23:59:00'
GROUP BY o.CustomerID, o.BillFirstName, o.BillMiddleName, o.BillLastName
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.