webForumDet fria alternativet

Byta värde mellan två poster

Databaser & SQL

7 svar · 255 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Hej

Jag har ID1 och ID2
Nu vill jag byta värde i kolumnen sortering mellan dessa poster. Hur gör jag enklast en sql update för detta?

Exempel på tabell innan uppdate:

ID  Sortering
1      8
2      4

Efter update

ID  Sortering
1      4
2      8
Medlem sedan dec. 200012 464 inlägg
#2
update t as q 
set  sortering = (select sortering 
from t where id = case when q.id = 1 then 2 else 1 end)
where id in (1,2)
Medlem sedan jan. 20013 406 inlägg
#3

Kan man förenkla det ytterligare så att man endast skickar ett ID och sedan byter ID med den post som ligger ovanför när man sorterar efter kolumnen sortering?

Medlem sedan dec. 200012 464 inlägg
#4

med den post som ligger ovanför

Du menar den post med högsta id som är mindre än ID.

Använd inte begrepp som ovanför eller under, det är inte relevant.

Det går väl att lösa. Vilken DBMS gäller det?

Medlem sedan jan. 20013 406 inlägg
#5

Exempel:

id   sortering  Namn
1       8            A
2       6            B
3       9            C
4       1            D

Detta skrivs ut om man sorterar efter kolumnen sortering.

D
B
A
C

Väljer jag exempelvis att flytta A så skickar jag ID 1 till funktionen och då ska tabellen se ut på det här sättet nedan. Alltså att ID 1 och ID 2 byter värde med varandra i kolumnen sortering.

id   sortering  Namn
1       6            A
2       8            B
3       9            C
4       1            D

Kan nämnas att ID är en räknare med unikt värde.
Det gäller för en access databas men ska uppgraderas till en MS-SQL

Medlem sedan jan. 20013 406 inlägg
#6

Får inte äns till första frågan.

Update meny as m set m.meny_sortering = (select meny_sortering 
from meny where meny_id = case when m.meny_id = 57 then 56 
else 57 end) where meny_id in (57,56)

Tabellen meny ser ut enligt följande:
meny_id, meny_sortering

Medlem sedan jan. 20013 406 inlägg
#7

Man kanske ska hämta det andra värdet i en sql-sträng och sedan köra två olika uppdate satser?

Medlem sedan dec. 200012 464 inlägg
#8

Jo, det låter ju enklast om du vill få till en lösning som fungerar i både Access och SQL server.

Access har inte stöd för case utan där får man använda iif. Har också för mig att den inte gillar att man använder subselect i set.

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)