Avatar billede larsmikkelsenruko Nybegynder
11. januar 2010 - 17:55 Der er 7 kommentarer

JOIN 2 tabeller - men ikke så ligetil som det lyder.

Jeg har 2 tabeller:

1. Standard_Priser
2. Prisliste

Standard_Priser rummer 1 stk. priser af 70.000 varenumre: "varenummer", "pris", "minimumskøb"

Prisliste rummer specielle priser, der "overtrumfer" records i "Standard_Priser". Samme format: "varenummer", "pris", "Minimumskøb".

Nu kommer udfordringen: Jeg ønsker et samlet udtræk fra bege tabeller i et view.
Men såfremt varen findes i "Prisliste" (varenummmer og minimumskøb identiske records i begge tabeller), skal kun record fra Prisliste medtages. Prisliste "overstyrer" således Standard_priser.

Jeg syntes jeg har prøvet med JOIN, men uden brugbart resultat.

Nogle idéer? (Bemærk: som et view, altså ikke noget med cursor/stored procedures - skal kunne tilgåes fra andre datakilder, Excel m.v. Functions OK.)
Avatar billede Syska Mester
11. januar 2010 - 18:07 #1
select isnull(t2.pris, t1.pris) from t1
left join t2 on t1.id = t2.id

Antaget at der kun er 1 pris som passer sammen med hvert ID i de 2 tables.

// ouT
Avatar billede larsmikkelsenruko Nybegynder
11. januar 2010 - 18:38 #2
Det samme varenummer forekommer i begge tabeller. I "standard_priser" dog altid med "minimumskøb=1", og i Prisliste kan samme varenummer fremgå flere gange med forskellige "minimumskøb".

Forestil dig du har en tyk prisliste med standard priser på alle varenumre, samt en mindre prisliste, hvor du har nogle bedre priser på udvalgte varer. Priserne i den mindre prisliste erstatter priserne i det store.

I den mindre prisliste kan det samme varenummer forekomme flere gange, fordi de bedre priser kan forudsætte et "mindstekøb".
Avatar billede Syska Mester
11. januar 2010 - 18:56 #3
ja ... men har du prøvet hvad jeg har skrevet ...

Burde løse begge problemer ...:

select isnull(t2.pris, t1.pris),isnull(t2.minkob, t1.minkob) from t1
left join t2 on t1.id = t2.id
Avatar billede larsmikkelsenruko Nybegynder
11. januar 2010 - 21:19 #4
Det virker - jeg havde lavet en kanon bøf!

Thanks.... (hvor hulen klikker jeg for at give dig pointene?)
Avatar billede Syska Mester
11. januar 2010 - 21:38 #5
Jeg smider først et svar.

Hvad endte din løsning med? (hvis andre nu skulle læse med)

// ouT
Avatar billede larsmikkelsenruko Nybegynder
11. januar 2010 - 22:41 #6
Sorry - jeg var for hurtig.

Dur ikke med ISNULL - jeg får jo ikke den korrekte record, når samme record findes i begge tabeller.

Har dog løst problemet på en anden måde, ved at anvende multi-statement table-value function. Ikke så pænt, men det fungerer. Tror det samme kan skrives som flere joins og sub-queries i samme SELECT, men det er ikke så vedligeholdelses-venligt.
Avatar billede Syska Mester
11. januar 2010 - 22:50 #7
Hvad mener du med at du ikke får den korrekte record ... så gør du noget galt ...

Post den her ... det skal jo virke og det er logisk. Hvor join fra den ene til den anden table er NULL, skal den tage org pris, eller skal den tage den nye pris.

// ouT
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