28. februar 2012 - 14:38Der er
4 kommentarer og 2 løsninger
update 2 rækker hvor række 1 id er i række 2
Hey,
Jeg har fornøjelsen af at sidde med en tabel i MS SQL Jeg har et væld af records og en del af disse skal opdateres.
Jeg kan selvfølgelig godt gøre således:
Update KLASSER set journalnummer = '85' where journalnummer = '11'
Problemet er bare at jeg vil have opdateret et felt mere, i en anden række i samme tabel.
for hver sag er der 2 rækker i denne database
ID som er unik SAGSID som der er i begge rækker feltet journalnummer som har indholdet 11 og skal rettes til 85 feltet sortering, som hedder 1 når indholdet i journalnummer hedder 11 og 2 når indholdet i journalnummer hedder Gxy
det jeg altså gerne vil er at alle records med journalnummer 11 skal rettes til 85 og i samme ombæring skal records med samme sagsid og sorteringsværdi 2 opdateres til GGG
Det lyder som en utraditionel datastruktur. Dit spørgsmål går på den bestående tabel, og der har jeg ikke umiddelbart et svar, men det ville formentligt være en simpel opgave med en anden tabelstruktur. Ser din tabel omtrent således ud?
og da der ligger noget program og bruger tabel i dens nuværende form kan jeg altså ikke rette tabellen.
altså er jeg nok ude i et eller andet med at identificere sagsid hvor journalnummeret er 11 hælde det i en temp tabel efterfølgende lave et update hvor alle sager med sagsid i original tabel og sortering = 2 som findes i temp tabel skal have opdateret journalnummer med GGG
så er det bare lige at skrive en sjat sql der så gør det, og det volder mig lidt vanskeligheder.
noget i stil med
select sagsid, journalnummer from klasser where journalnummer= '11'
insert into temp_tbl
update klasser set journalnummer ='GGG' where sagsid in(select sagsid from temp tabel)
Jeg har været fra det, men her er mit bud. For test oprettede jeg en tabel teamdev som vist nedenfor. Så kørte jeg disse fire queries (1) oprette en temporary tabel, (2) overføre dertil de sagsid'er hvor journalnummer = 11, (3) Update journalnummer til GGG hvor sortering = 2, og (4) update journalnummer til 85 where journalnummer = 11.
CREATE TABLE teamdevtemp(sagsid INT);
INSERT INTO teamdevtemp (SELECT sagsid FROM teamdev WHERE journalnummer = 11);
UPDATE teamdev SET journalnummer = 'GGG' WHERE sortering = 2 AND sagsid IN (SELECT sagsid FROM teamdevtemp);
UPDATE teamdev SET journalnummer = '85' WHERE journalnummer = '11';
Svaret kan jeg ikke rigtigt anfægte :-) Det fik mig i hvertfald på rette vej
Et par ændringer:
Brug en temporær tabel og nøjes med sagsid, resten skal ikke bruges.
Create table #tmp_sagsid (SagsID INT)
-- tag alle SagsID og sæt ind i temporær tabel
INSERT INTO #tmp_sagsid (SagsID) select SagsID from Klasser -- where statement udbygges med de nødvendige journalkoder enten med LIKE eller med = '' where Journalnummer = '11' or Journalnummer ='12' or Journalnummer = '16'
UPDATE Klasser SET Journalnummer = 'G01' where Sortering=2 and SagsID in(select SagsID from #temp_SagsID)
-- vi er færdige med den temporære tabel som droppes
drop table #temp_SagsID
-- så skal vi blot opdatere journalnummeret på de samme sager som før - her er det særligt vigtigt at where delen er identisk med den i det forrige insert statement
UPDATE Klasser SET Journalnummer = '85' where Journalnummer='11' or Journalnummer='12' or Journalnummer='16'
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.