webForumDet fria alternativet

2 rader = 1 & nytt total värde

5 svar · 231 visningar · startad av Dino

DinoMedlem sedan sep. 20011 914 inlägg
#1

Har då denna tabell, cartitems.

c_id | c_c_id | c_p_id | c_q
----------------------------------
 1   |   1    |   4    |  2
[b] 2   |   1    |   32   |  1[/b]
 3   |   2    |   9    |  1
[b] 4   |   2    |   32   |  4[/b]
 5   |   1    |   27   |  1
 6   |   2    |   6    |  1

Och via denna updaten

UPDATE cartitems SET c_c_id = @newcartID WHERE c_c_id = @oldcartID

så slås två olika c_c_id ihop, men om det finns dubbletter av c_p_id så vill jag att de skall slås ihop och dess c_q bli totalsumma av deras c_q. I tabellen ovan så vill jag alltså att rad 2 och 4 slås ihop och dess c_q värde blir 5.

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Det går inte att få ihop i en fråga. Du måste ju ta bort den ena raden

if  exists( select * from  cartitems where c_c_id = @newcartid)
begin
     update  cartitems set c_q =  (select sum(c_q) ... ) 
     where ...
      delete ...
end
else
    update ...

Den första update går att skriva på lite olika sätt, det går också med en selfjoin istf subselect.

DinoMedlem sedan sep. 20011 914 inlägg
#3

Inte riktigt med. Först gör jag så att de får samma c_c_id och sen... Kan du beskriva i text vad som skall hända.

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Beskriva ... Ett sql-statement säger mer än 1K eller ...

Bara för att vara helt på det klara med vad du vill

Vilka värden har @oldcartid och @newcartid i ditt exempel och hur skulle tabellen se ut efter update.

DinoMedlem sedan sep. 20011 914 inlägg
#5

Så här ser den del av koden som är aktuell ut nu:

DECLARE @oldcartID int, @newcartID int 
SET @oldcartID = (SELECT cart_id FROM shoppingcart WHERE cart_cust_id = @cartcustID)
SET @newcartID = (SELECT cart_id FROM shoppingcart WHERE cart_cust_id = @username)
UPDATE shoppingcartitems SET carti_cart_id = @newcartID WHERE carti_cart_id = @oldcartID
DELETE shoppingcart WHERE cart_cust_id = @cartcustID

@oldcartID = ett id som är förknippat med en temp kund, i koden nedan = 2
@newcartID = ett id som är förknippat med en registrerad kund, i koden nedan = 1

Före:

c_id | c_c_id | c_p_id | c_q
----------------------------------
 1   |   1    |   4    |  2
[b] 2   |   1    |   32   |  1[/b]
 3   |   2    |   9    |  1
[b] 4   |   2    |   32   |  4[/b]
 5   |   1    |   27   |  1
 6   |   2    |   6    |  1

Efter:

c_id | c_c_id | c_p_id | c_q
----------------------------------
 1   |   1    |   4    |  2
[b] 2   |   1    |   32   |  5[/b]
 3   |   1    |   9    |  1
 5   |   1    |   27   |  1
 6   |   1    |   6    |  1

Endast två rader kan ha samma c_p_id.

DinoMedlem sedan sep. 20011 914 inlägg
#6

Drar upp denna tråd igen, då varken jag eller andra jag frågat lyckats lösa problemet.

RED// Löste sig.

123 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
120 ms — hämta tråd, inlägg och bilagor (db)