我有三個表:如何計算在select語句的列共有來自其他表值
CustOrder:
id, CreateDate, Status
DenominationOrder:
id, DenID, OrderID
面額:
id, amount
我想創建基於所有這些表的視圖,但應該有一個附加列即Total
應該在那裏,其可以計算出每個訂單的量的總和。
例如
- 順序1總面額3,總量= 250 + 250 + 250 = 750
- 順序2種總面額2,總量= 250 + 250 = 500
是否有可能?
我有三個表:如何計算在select語句的列共有來自其他表值
CustOrder:id, CreateDate, Status
DenominationOrder:id, DenID, OrderID
面額:id, amount
我想創建基於所有這些表的視圖,但應該有一個附加列即Total
應該在那裏,其可以計算出每個訂單的量的總和。
例如
是否有可能?
我試着猜測你的表的關係(和數據量太大,你沒有提供任何樣本):
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
我已經嘗試過這一個,但它提供了所有不是逐行的總和:-SELECT總和(d.amount)作爲從CustOrder o,DenominationOrder den,面額d其中o._id = den.OrderID和d._id = den.DenID – Fundi 2012-04-11 13:28:38
@Fundi:編輯你的問題發佈樣本數據,我們無法工作,我們認爲你有... – Marco 2012-04-11 13:29:49
@Fundi:你發佈的評論是什麼查詢?這是不對的!!你必須使用我的查詢,而不是你的!你使用(在你的查詢結束時)'AND o._id = 2',所以你只能得到order = 2!更多:請不要使用'WHERE'條件來替換'JOIN',請!!! – Marco 2012-04-11 13:30:45
試試這個:
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
另一種方法這個,通過使用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
,什麼是你已經嘗試在SELECT語句(或正在)? – 2012-04-11 13:12:09