Hjælp til SQL tabelopdatering

Tags:    databaser

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



1 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Jeg har ikke en SQL server, men jeg har prøvet under postgreSQL og med de få kunder/varer jeg gad indtaste, ser det ud til at virke (hvis jeg har forstået din forklaring, altså :) ):

Fold kodeboks ind/udKode 




t