2017-09-23 3 views
0

SUMでSQL内の異なるテーブルからデータを収集したいとします。製品のpiecepriceを掛けてその隣にcargopriceを追加したいのですが、cargopriceが複数行にあるため、これらのいずれかを使用する必要があります。次のようにしかし、私はDISTINCTを使用することはできません。私はSQLクエリで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)'でのプレゼンテーションは余分です。 1つの行を選択します(集計に 'GROUP BY'節がないためです)。 'DISTINCT'は1行を...、まあ、1行に減らします:-) –

+0

** MySQLの場合:**任意のレコードから選択した1つのcargopriceを追加します。 ** SQL Serverの場合:**価格x個の合計に1つのcargopriceを追加しますが、集計には単一のcargopriceは含まれず、構文エラーメッセージが表示されます。 –

+0

"GROUP BY tbl_Cargo.cargoprice"を追加するのを忘れてしまったので、私のコードは私のために働いています。 – Shadouspan

0

一つの貨物は、いくつかの注文を含めることができます。したがって、貨物#100で出荷される注文#1と#2、および貨物#200で出荷される注文#3と#4を持つ可能性があります。したがって、2つの注文の合計が必要ですが、この例では2つの貨物しか必要ありません。この問題を解決するには

、貨物によってグループにご注文を:

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 ; 
関連する問題