webForumDet fria alternativet

2 rader = 1 & nytt total värde

Databaser & SQL

5 svar · 231 visningar · startad av Dino

Medlem sedan sep. 20011 914 inlägg
Frågan#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.

Medlem 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.

Medlem 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.

Medlem 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.

Medlem 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.

Medlem 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.

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)