繁体   English   中英

SQL查询的加入问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM