20. august 2019 - 10:34 Der er 6 kommentarer og
2 løsninger

Sammenlæg varelinier med ens varenr på en ordre

En kunde har to ordre... og de to ordre ændres til en ordre
Indtil nu er ordrenummeret blot blevet ændret for varelinierne, men for at undgå, at det samme varenummer står på ordren to gange, så skal varelinier med samme varenummer sammenlægges

er der en der har haft en lignende problematik, som måske lidt sql input ?
Avatar billede michael_stim Ekspert
20. august 2019 - 10:41 #1
Ved ikke rigtigt om jeg forstår.

Du har:

12346  vare1  1stk
12346  vare1  1stk
12347  vare2  1stk

Og vil have:

12346  vare1  2stk
12347  vare2  1stk

I så fald er det vel bare at sätte en count og group by på?
20. august 2019 - 10:55 #2
Du har forstået det rigtigt.

Står med to ordre

ordre 1 har f.eks. 2 linier
vare 12346 - 1 stk
vare 7777 - 1 stk

ordre 2 har f.eks. 2 linier
vare 12346 - 1 stk
vare 12347 - 2 stk

jeg ville helst reducere det til 3 varelinier
7777 - 1
12346 - 2
12347 - 2

Det er for ikke at skulle lave for meget om i andre processer, at jeg gerne vil nøjes med 3 rækker
Avatar billede acore Ekspert
20. august 2019 - 11:46 #3
Ønsker du at ændre indholdet i din varelinie-tabel eller ønsker du at ændre output fra din query?

Det sidste er det letteste (count og group som foreslået af michael_stim).

Det første er mere kompliceret. Måske kræver det en hjælpe-tabel eller noget PHP (eller hvad du nu bruger ud over mySQL).
20. august 2019 - 11:52 #4
Kan se jeg har valgt forkert db - det er sql server, men jeg ønsker at ændre varelinie-tabellen - slette nogle linier og ændre antal stk på andre linier

Kan godt være jeg er nødt til at lave et loop af records, og det kan jeg også godt gøre via VBA, men ville gerne have haft en SQL løsning, hvis der var en MERGE-agtig funktion
Avatar billede michael_stim Ekspert
20. august 2019 - 12:02 #5
MSSQL eller MySQL er ligegyldigt. Men syndes ikke det er optimalt at begynde at slette fra tabellen, altid en god ide at have originaldata liggende. Havde nok skabt en anden tabel og lagt det over i den.
20. august 2019 - 12:14 #6
Ordren ligger i reserveret, og er ikke bekræftet endnu, så om linien ligger der eller ej betyder ikke så meget, faktisk ingen ting, men måske skulle jeg bare oprette en ny reservering... loope lidt rundt i varelinierne og oprette de nye linier, hvor jeg har har lavet sum på antal... og derefter sætte status på de to andre reserveringer til annulleret

Nå, det finder jeg ud af - tak for jeres input
Avatar billede acore Ekspert
20. august 2019 - 12:15 #7
Enig med Michael, men hvis du vil gøre det, er en mulighed:

1. UPDATE ordre2id til ordre1id i alle varelinier
2. Lav SELECT med SUM på antal og GROUP by vareid og brug den til INSERT i varelinie-tabellen, hvor ordreid sættes til "xxx" (bare et eller andet, der ikke bruges)
3. DELETE alle varelinier med ordreid1
4. UPDATE alle varelinier med "xxx" til ordreid1

men jeg medgiver, at det ikke er en køn læsning og i tiden mellem det første og det sidste query skal der ikke være andre brugere, der forsøger at ændre noget.
20. august 2019 - 12:29 #8
starter med at sætte ordrestatus til annulleret på ordre 1 og 2, så dukker de ikke op andre steder, så behøver jeg ikke slette noget, og historikken er intakt
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester