2017-09-23 3 views
0

Je veux collecter des données de différentes tables dans SQL avec SUM. Je veux multiplier le piece et price du produit et ajouter le cargoprice à côté d'elle, mais je dois employer un de ceux-ci parce que cargoprice est sur plusieurs lignes. Mais je ne peux pas utiliser DISTINCT comme suit:Je ne peux pas utiliser DISTINCT avec SUM dans une requête SQL

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

Je suppose que vous n'avez pas besoin ou clauses SUM DISTINCTS. Pour obtenir une bonne réponse à cette question, vous devez fournir des exemples de données provenant des deux tableaux et des résultats souhaités. – PacoDePaco

+2

partagez votre schéma et les exemples de données et les résultats que vous souhaitez obtenir – lostmylogin

Répondre

0

Vous pouvez utiliser « group by » dans votre requête. Les exemples de codes sont ci-dessous;

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

Je résolu le problème avec ce code: 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

Etes-vous sûr que c'est SQL Server? Votre requête est invalide et devrait entraîner une erreur de syntaxe. Le seul SGBD que je connaisse qui laisserait passer (et renvoyer un résultat indésirable à la place) est MySQL. 'DISTINCT' n'est pas une fonction; ça marche sur toute la ligne; les prarentheses dans 'SELECT DISTINCT (tbl_Cargo.cargoprice)' sont superflues par conséquent. Vous sélectionnez une ligne (car il existe une agrégation sans clause GROUP BY). 'DISTINCT' réduit la ligne à ..., bien, une ligne :-) –

+0

** En MySQL: ** Pour la somme des prix x pièce, vous ajoutez un cargoprice choisi à partir de n'importe quel enregistrement choisi arbitrairement. ** Dans SQL Server: ** Pour la somme du prix x pièce, vous ajoutez un cargoprice, mais l'agrégation ne contient pas un seul cargoprice et vous obtenez un message d'erreur de syntaxe. –

+0

J'ai oublié d'ajouter "GROUP BY tbl_Cargo.cargoprice" Donc oui, mon code fonctionne pour moi. – Shadouspan

0

Une cargaison peut contenir plusieurs ordres. Vous pouvez donc avoir les commandes # 1 et # 2 expédiées avec la cargaison # 100 et les commandes # 3 et # 4 expédiées avec la cargaison # 200. Vous avez donc besoin de la somme de deux commandes, mais de seulement deux cargaisons dans cet exemple.

Pour résoudre ce problème, regroupez vos commandes par la cargaison:

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 ;