Avatar billede michael_d Nybegynder
13. september 2008 - 17:42 Der er 3 kommentarer og
1 løsning

Hjælp til SQL tabelopdatering

En leverandør skal udsende prislister til sine kunder.
Hver kundes prisliste skal indeholde kundens varenr., varetekst og kundens pris.
Kunderne kan have forskellige priser for den samme vare, og kan have varenumre, der afviger fra leverandørens egne varenumre.
Kundernes varenumre og priser kan være specifik for det enkelte kundenr., eller være gældende for en kundegruppe. I tilfælde af, at en kunde både har sit eget varenr/pris og et varenr/pris for den kundegruppe, som han tilører, er det værdierne på kundenrummeret, der er gældende.
For at håndtere dette, er flg. tabeller/felter i spil (kun relevante tabeller/felter er nævnt):

Tabel Kunder
•Kundenr
•Kundegruppe

Tabel Varer
•Varenr (leverandørens eget varenr.)
•Varetekst

Tabel Xref
•Kundegruppe
•Kundenr
•Kundevarenr (kundens/kundegruppens varenr.)
•Varenr (leverandørens eget varenr.)

Tabel Pris
•Varenr (leverandørens eget varenr.)
•Kundenr
•Kundegruppe
•Pris

Først ønskes dannet en tabel Prisliste_samlet, indeholdende en samlet prisliste, som tager udgangspunkt i samtlige kombinationer af Kunder.Kundenr og Varer.Varenr:

Tabel Prisliste_samlet
•Kundenr
•Varenr (leverandørens eget varenr.)
•Kundevarenr
•Varetekst
•Pris

Ud fra den samlede prisliste kan de enkelte kunders prislister trækkes ud via filter på Kundenr og Pris <> null.

Spørgsmålet går på, hvorledes de krævede SQL statements skal se ud for at placere de korrekte værdier i tabel Prisliste_samlet’s felter Kundevarenr, Varetekst og Pris.
Jeg mener at kunne beskrive sammenhængene som beskrevet nedenfor, men kan ikke lykkes med at få SQL til at gøre som jeg ønsker.

Jeg bruger SQL Server 2000 / SQL Server Enterprise Manager / DTS pakker som redskab (engelsk syntaks), og tester med SQL Query Analyzer.

•Kundevarenr:
HVIS der i Xref findes en record med sammenhæng mellem Kundenr og Varenr
SÅ skal Xref.Kundevarenr returneres direkte via Xref
ELLERS
HVIS der i Xref findes en record med sammenhæng mellem Kundegruppe og Varenr via Kunder
HVOR Kundenr = Kunder.Kundenr
OG Kunder.Kundegruppe = Xref.Kundegruppe
SÅ skal Xref.Kundevarenr returnes
ELLERS skal Varenr returneres.

•Varetekst:
HVIS Kundevarenr = Varenr
SÅ skal Varer.Varetekst returneres direkte via Varer
ELLERS
skal Varer.Varetekst returneres via Xref
HVOR Kundevarenr = Xref.Kundevarenr
OG Xref.Varenr = Varer.Varenr.

•Pris:
HVIS der i Pris findes en record med sammenhæng mellem Kundenr og Varenr
SÅ skal Pris.Pris returneres direkte via Pris
ELLERS
skal Pris.Pris returneres via Kunder
HVOR Kundenr = Kunder.Kundenr
OG Kunder.Kundegruppe = Pris.Kundegruppe
Avatar billede kentjohansen Nybegynder
26. september 2008 - 19:31 #1
Er det rigtigt forstået at der ikke for alle varer og kunder findes en record i Xref tabellen. Der findes altså alene en record med varen og kunden hvis kundevarenr er forskelligt fra leverandør varenr?
Avatar billede michael_d Nybegynder
26. september 2008 - 20:19 #2
Det er helt rigtigt forstået :-)
Avatar billede kentjohansen Nybegynder
26. september 2008 - 21:18 #3
Tabel Prisliste_samlet kan laves ud fra følgende sql:
-------------
SELECT Kunder.KundeNr, Pris.VareNr, Xref.KundeVareNr, Varer.VareTekst, Pris.Pris
FROM Varer
INNER JOIN Pris ON Pris.VareNr = Varer.VareNr
INNER JOIN Kunder ON Kunder.KundeNr = Pris.KundeNr
LEFT OUTER JOIN Xref ON Xref.KundeNr = Kunder.KundeNr AND Varer.VareNr = Xref.VareNr
WHERE Pris.Pris > 0
-------------

Derefter kan den enkelte kundes prisliste udtrækkes på følgende måde:
-------------
SELECT KundeNr, CASE WHEN ISNULL(KundeVareNr, -1) > 0 THEN KundeVareNr ELSE VareNr END AS VareNr, Pris
FROM Prisliste_samlet
WHERE Kundenr = xx
--------------

Jeg har kun vist hvordan varenr hentes men Varetekst og Pris kan hentes på samme måde.
Avatar billede michael_d Nybegynder
16. oktober 2008 - 22:02 #4
Tak for hjælpen!
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