AndreasCMedlem sedan mars 20011 964 inlägg Jag har två tabeller i Access som är identiska till formatet. Alla fält är lika.
Fälten är:
Artikelnr, Artikelnamn, P, Antal_i_lager, Ordernr, TaBort, Utfyllnad
Jag vill med en uppdateringsfråga kunna uppdatera alla poster i ena tabellen med innehållet i fältet Antal_i_lager i den andra tabellen där P är lika. Där P är lika i båda tabellerna ska alltså ändast fältet Antal_i_lager uppdateras, de andra fälten ska lämnas orörda.
Antal_i_lager ska uppdateras så att det antal som ligger i källtabellen ska adderas till antalet som redan står i måltabellen, ifall det står något där. Anta att det minsta värdet för antal som kan finnas i måltabellen är 0. Anta att det aldrig kan vara blankt. Om det står 10 för antal i måltabellen och 5 i källtabellen så ska resultatet bli 15 i måltabellen efter att frågan har körts.
Har försökt att fixa detta men frågan uppdaterar tyvärr inte enbart Antal_i_lager utan även innehållet i de andra fälten och förstör därmed datan vilket givetvis inte är så bra.
Vet inte hur väl det funkar med just Access, men pröva:
UPDATE tbl_produkter t1
SET t1.Antal_i_lager = t1.Antal_i_lager + s1.Antal_i_lager
FROM
(
SELECT s2.P as P, s2.Antal_i_lager as Antal_i_lager
FROM tbl_produkter t2, tbl_inkommande s2
WHERE t2.P = s2.P and s2.Antal_i_lager > 0
) s1
WHERE t1.P = s1.P
AndreasCMedlem sedan mars 20011 964 inlägg Jag antar att tabellerna i exemplet heter tbl_produkter och tbl_inkommande, men vad betyder t1, t2 respektive s1?
AndreasC skrev:
Jag antar att tabellerna i exemplet heter tbl_produkter och tbl_inkommande, men vad betyder t1, t2 respektive s1?
Det är alias för tabellerna, om du kollar så står det tbl_produkter t1 och så kan man referera till samma tabell med t1 istället för tbl_produkter
AndreasCMedlem sedan mars 20011 964 inlägg Ok, då blev det klarare. Tack :)
Ska kolla din kod ikväll nitro2k01. Återkommer med reslutat.
AndreasCMedlem sedan mars 20011 964 inlägg Koden ser nu ut såhär:
UPDATE tblProdukter t1
SET t1.Antal_i_lager = t1.Antal_i_lager + s1.Antal_i_lager
FROM
(
SELECT s2.P as P, s2.Antal_i_lager as Antal_i_lager
FROM tblProdukter t2, tblTemp_Produkter s2
WHERE t2.P = s2.P and s2.Antal_i_lager > 0
) s1
WHERE t1.P = s1.P;
Jag lade till ; efter koden för att avsluta den.
Jag får syntaxfel och information om att en operator saknas. Vad är fel?
Står det vilken rad felet uppstår på eller dylikt?
AndreasC skrev:
Jag får syntaxfel och information om att en operator saknas. Vad är fel?
Kan du skriva ut hela SQL frågan, felkoder och kanske något mer av din kod, verkar konstigt att den gnäller på ovanstående.
Pröva också att köra delfrågan för att se om du får fel då.
SELECT s2.P as P, s2.Antal_i_lager as Antal_i_lager
FROM tblProdukter t2, tblTemp_Produkter s2
WHERE t2.P = s2.P and s2.Antal_i_lager > 0
AndreasCMedlem sedan mars 20011 964 inlägg Delfrågan gick att köra utan syntaxfel. Har inte kontrollerat resultatet men den gick iallafall att köra.
Hela koden ser ut såhär:
UPDATE tblProdukter t1
SET t1.Antal_i_lager = t1.Antal_i_lager + s1.Antal_i_lager
FROM
(
SELECT s2.P as P, s2.Antal_i_lager as Antal_i_lager
FROM tblProdukter t2, tblTemp_Produkter s2
WHERE t2.P = s2.P and s2.Antal_i_lager > 0
) s1
WHERE t1.P = s1.P;
Försöker jag köra ovanstående får jag:
Syntaxfel (operator saknas) i frågeuttrycket 't1.Antal_i_lager + s1.Antal_i_lager
FROM
(
SELECT s2.P as P, s2.Antal_i_lager as Antal_i_lager
FROM tblProdukter t2, tblTemp_Produkter s2
WHERE t2.P = s2.P and s2.Antal_i_lager > 0
) s1'.
AndreasCMedlem sedan mars 20011 964 inlägg Har modifierat koden nu. Är inte så bra på SQL men detta känns som det kan ge samma resultat:
UPDATE tblProdukter
SET tblProdukter.Antal_i_lager = tblProdukter.Antal_i_lager + tblTemp_Produkter.Antal_i_lager
FROM tblTemp_Produkter
WHERE tblProdukter.P = tblTemp_Produkter.P and tblTemp_Produkter.Antal_i_lager > 0;
Vad tror ni? Tänkte testa koden nu i natt.
EDIT: Jag har löst problemet. Det slutliga SQL-uttrycket blev som följande:
UPDATE tblProdukter, tblTemp_Produkter
SET tblProdukter.Antal_i_lager = [tblProdukter].[Antal_i_lager]+[tblTemp_Produkter].[Antal_i_lager]
WHERE (((tblProdukter.Artikelnamn)=[tblTemp_Produkter].[Artikelnamn]) AND ((tblProdukter.P)=[tblTemp_Produkter].[P]) AND ((tblTemp_Produkter.Antal_i_lager)>0));
Jag lade även till ett extra where-villkor. Uppdateringen sker om artikelnnamn och P är desamma i båda tabellerna samt att Antal_i_lager överstiger 0 i källtabellen.