2017-09-23 39 views
0

我想從SUM的SQL中的不同表中收集數據。我想將產品的pieceprice相乘,並在其旁邊添加cargoprice,但由於cargoprice位於多行上,因此我必須使用其中的一種。但是,如下我不能使用DISTINCT我不能在SUM查詢中使用DISTINCT

SELECT 
SUM((tbl_Product.price * piece) + DISTINCT(tbl_Cargo.cargoprice)) AS total 
FROM tbl_Order 
LEFT JOIN tbl_Product ON tbl_Product.productid = tbl_Order.productid 
LEFT JOIN tbl_Cargo on tbl_Cargo.cargoid = tbl_Order.cargoid 
WHERE userid = '1' 
+4

我的猜測是,你不需要SUM或DISTINCT子句。爲了得到這個問題的正確答案,您需要提供來自兩個表格和期望輸出的樣本數據。 – PacoDePaco

+2

分享您的架構和示例數據以及您想獲得的結果 – lostmylogin

回答

0

您可以在查詢「按組」使用。示例代碼如下。

select SUM(price*piece)+cargoPrice,cargoPrice from (
select 5 as price,2 as piece,1 as cargoPrice 
union all 
select 5 as price,2 as piece,1 as cargoPrice 
union all 
select 5 as price,2 as piece,2 as cargoPrice 
union all 
select 5 as price,3 as piece,2 as cargoPrice 
union all 
select 5 as price,4 as piece,3 as cargoPrice 
)A 
group by cargoPrice 
-1

我解決了這個問題,此代碼:SELECT DISTINCT(tbl_Cargo.cargoprice) + SUM(tbl_Product.price * piece) AS total FROM tbl_Order LEFT JOIN tbl_Product ON tbl_Product.productid = tbl_Order.productid LEFT JOIN tbl_Cargo on tbl_Cargo.cargoid = tbl_Order.cargoid WHERE userid = '1' GROUP BY tbl_Cargo.cargoprice

+0

您確定這是SQL Server嗎?您的查詢無效,並應導致語法錯誤。我知道的唯一的DBMS會讓這個漏洞(而不是返回一個不希望的結果)是MySQL。 'DISTINCT'不是一個函數;它在整個線路上工作;因此,'SELECT DISTINCT(tbl_Cargo.cargoprice)'中的表達式是多餘的。您選擇一行(因爲沒有「GROUP BY」子句的聚合)。 'DISTINCT'減少一行到......,以及一行:-) –

+0

**在MySQL中:**對於價格×片段的總和,您可以從任意選擇的記錄中添加一個cargoprice。 **在SQL Server中:**對於價格×片的總和,您添加一個cargoprice,但他聚合不包含單個cargoprice,並且您收到語法錯誤消息。 –

+0

我忘了添加「GROUP BY tbl_Cargo.cargoprice」所以是的,我的代碼適合我。 – Shadouspan

0

一個貨物可以包含幾個數量級。因此,您可能會訂購第#1號和第2號貨物,第#100號貨物以及#3和第4號訂單隨貨物#200一起發貨。所以你需要兩個訂單的總和,但在這個例子中只有兩個訂單。

爲了通過貨物解決這個問題,集團訂單:

select sum(per_cargo.pricesum + tbl_cargo.cargoprice) as total 
from 
(
    select o.cargoid, sum(p.price * p.piece) as pricesum 
    from tbl_order o 
    join tbl_product p on p.productid = o.productid 
    where o.userid = 1 
    group by o.cargoid 
) per_cargo 
join tbl_cargo on tbl_cargo.cargoid = per_cargo.cargoid ;