2012-04-11 55 views
0

我有三个表:如何计算在select语句的列共有来自其他表值

  • CustOrderid, CreateDate, Status

  • DenominationOrderid, DenID, OrderID

  • 面额id, amount

我想创建基于所有这些表的视图,但应该有一个附加列即Total应该在那里,其可以计算出每个订单的量的总和。

例如

  • 顺序1总面额3,总量= 250 + 250 + 250 = 750
  • 顺序2种总面额2,总量= 250 + 250 = 500

是否有可能?

+1

,什么是你已经尝试在SELECT语句(或正在)? – 2012-04-11 13:12:09

回答

2

我试着猜测你的表的关系(和数据量太大,你没有提供任何样本):

SELECT co.id, 
     COUNT(do.DenID) AS `Total denominations`, 
     SUM(d.amount) AS `Total amount` 
FROM CustOrder co 
INNER JOIN DenominationOrder do ON co.id = do.OrderId 
INNER JOIN Denomination d ON do.DenId = d.id 
GROUP BY co.id 
+0

我已经尝试过这一个,但它提供了所有不是逐行的总和:-SELECT总和(d.amount)作为从CustOrder o,DenominationOrder den,面额d其中o._id = den.OrderID和d._id = den.DenID – Fundi 2012-04-11 13:28:38

+1

@Fundi:编辑你的问题发布样本数据,我们无法工作,我们认为你有... – Marco 2012-04-11 13:29:49

+0

@Fundi:你发布的评论是什么查询?这是不对的!!你必须使用我的查询,而不是你的!你使用(在你的查询结束时)'AND o._id = 2',所以你只能得到order = 2!更多:请不要使用'WHERE'条件来替换'JOIN',请!!! – Marco 2012-04-11 13:30:45

0

试试这个:

SELECT o.CreateDate, COUNT(o.id), SUM(d.amount) AS 'Total Amount' 
FROM CustOrder o 
INNER JOIN DenominationOrder do ON o.id = do.OrderID 
INNER JOIN Denomination  d ON do.DenId = d.id 
GROUP BY o.CreateDate 

DEMO

另一种方法这个,通过使用CTE,像这样:

;WITH CustomersTotalOrders 
AS 
(
    SELECT o.id, SUM(d.amount) AS 'TotalAmount' 
    FROM CustOrder o 
    INNER JOIN DenominationOrder do ON o.id = do.OrderID 
    INNER JOIN Denomination  d ON do.DenId = d.id 
    GROUP BY o.id 
) 
SELECT o.id, COUNT(ot.id) AS 'Orders Count', ot.TotalAmount 
FROM CustOrder o 
INNER JOIN CustomersTotalOrders ot on o.id = ot.id 
INNER JOIN DenominationOrder do ON ot.id = do.OrderID 
INNER JOIN Denomination  d ON do.DenId = d.id 
GROUP BY o.id, ot.TotalAmount 

这会给你:

id | Orders Count | Total Amount 
-------+---------------+------------- 
    1   3    750 
    2   2    500 

DEMO using CTE

相关问题