webForumDet fria alternativet

få ut en totalsumma

Databaser & SQL

4 svar · 282 visningar · startad av Dino

Medlem sedan sep. 20011 914 inlägg
Frågan#1

Har denna sql-sats:

DECLARE @total int

SELECT	products.prod_id, products.prod_price, shoppingcartitems.carti_quantity
FROM  	shoppingcartitems INNER JOIN
     		shoppingcart ON shoppingcartitems.carti_cart_id = shoppingcart.cart_id INNER JOIN
              	products ON shoppingcartitems.carti_prod_id = products.prod_id
WHERE 	(shoppingcart.cart_cust_id = 12345)

som retunerar typ:

prod_id | prod_price | carti_quantity
-------------------------------------------
2	     41              2
7	     159	     1
45	     443	     1
48	     511	     1
31	     398	     6

Plus detta så vill jag att @total skall få det totala värdet av prod_price * carti_quantity, alltså:

 41 * 2 =   82
159 * 1 =  159
443 * 1 =  443
511 * 1 =  511
398 * 6 = 2388
-------------------
@total =  3583

Frågan är då, kan jag göra detta i samma fråga eller måste jag köra en separat fråga.

Medlem sedan mars 20034 471 inlägg
#2

Re: få ut en totalsumma

Pröva följande, dock vet jag inte om det går:

DECLARE @total int

SELECT P.prod_id, P.prod_price, S.carti_quantity, P.prod_price*S.carti_quantity AS total_price
FROM shoppingcartitems S INNER JOIN shoppingcart ON S.carti_cart_id = shoppingcart.cart_id INNER JOIN
products P ON S.carti_prod_id = products.prod_id
WHERE (shoppingcart.cart_cust_id = 12345)

(Införde S och P för att det skulle bli mer lättläst.)

Medlem sedan sep. 20011 914 inlägg
#3

Nää, det var inte riktigt som jag hade tänkt mig. Resultatet blir en extra kolumn med summan ex. 41*2 = visar 82. Det är alltså @total som skall få total värdet. Har en temp lösning med en select som tar ut info enligt selecten i första inlägget och en select som nedan, som då ger totalsumman till @total som skickas tillbaka med en output parameter.

SELECT	@total = sum(products.prod_price* shoppingcartitems.carti_quantity)
FROM  	shoppingcartitems INNER JOIN
     		shoppingcart ON shoppingcartitems.carti_cart_id = shoppingcart.cart_id INNER JOIN
              	products ON shoppingcartitems.carti_prod_id = products.prod_id
WHERE 	(shoppingcart.cart_cust_id = 12345)

Tänkte om man kunde slå samman frågorna till en.

Medlem sedan dec. 200012 464 inlägg
#4

Om du vill ha värdet i en parameter så ser jag inget bättre alternativ än din temp-lösning.

Om du vill ha allt i en fråga så får du nog leva med en extra kolumn

SELECT	products.prod_id, products.prod_price, shoppingcartitems.carti_quantity, sum(prod_price*carti_quantity)
FROM  	shoppingcartitems INNER JOIN
     		shoppingcart ON shoppingcartitems.carti_cart_id = shoppingcart.cart_id INNER JOIN
              	products ON shoppingcartitems.carti_prod_id = products.prod_id
WHERE 	(shoppingcart.cart_cust_id = 12345)
group by products.prod_id, products.prod_price, shoppingcartitems.carti_quantity
with rollup
Medlem sedan sep. 20011 914 inlägg
#5

Ok, då låter jag det vara som det är. Tack. :)

283 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
142 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
143 ms — ändringar (db)