Jeg har 3 tabeller. En kundetabel(Fk_Personnr,land), en person tabel(personnr,navn, postnr) og en telefontabel(fk_personnr, telefon).
Det er lavet sådan at en kunde kan have 1-2 telefonnumre. Nogen der kan fortælle hvordan jeg kan få lavet et select der vil give mig en oversigt over kunder: Personnr, navn, postnr, land, telefon, telefon 2 ?? hvor der så bare kan stå null i telefon 2 hvis de kun har et. Håber nogen kan hjælpe. kan kun få lavet det sådan at jeg får: Personnr, navn, postnr, land, telefon
og hvis de så har flere telefonnumre så kommer der bare en linje magen til hvor telefon så bare bliver telefon2.
det har jeg gjort med følgende statement: SELECT person.*, land, telefon FROM person, kunde, telefon WHERE person.personnr = kunde.personnr and person.personnr= telefon.personnr
Ja, det var det jeg tænkte? Altså det er fordi jeg skal kunne indlæse hver kunde i et kundeobjekt i C#, og deri har hver kunde mulighed for at have 2 telefonnumre, og hvis så de kun har et, så er telefon2 bare = 0 :)
Det her skulle kunne gøre det (ret selv lige tabelnavne og kolonne navne til så det passer til dit:
create table Kunder ( Personnr int, land varchar(10) )
create table Person ( Personnr int, Navn varchar(20), Postnr int )
create table Telefon ( Personnr int, Telefon varchar(10) )
;with cte as ( select row_number() over(partition by Personnr order by personnr) as rn, Personnr, telefon from telefon ) select t1.*, land, t3.telefon as Telefon1, t4.telefon as Telefon2 from Person t1 inner join kunder t2 on t1.Personnr = t2.personnr left outer join cte t3 on t2.personnr = t3.personnr and t3.rn = 1 left outer join cte t4 on t2.personnr = t4.personnr and t4.rn = 2
Ja sql'en er nu smart nok og du har fået hvad du spurgte efter, men anvendelsen er forkert. Hvad nu hvis der pludselig af sære årsager var 3 numre? eller en anden "snedig" udvikler brugte samme metode på måske en type som uden videre kunne gå fra 2 til mange? eks.vis.. hmm... kontaktpersoner i en boldklub, eller måske punkter på en linje? well.. min pointe er bare at begynder man først at forurene koden kan det gå grueligt galt i fremtiden. Ever heard about Broken Windows?
Den slags skal gøres i BL eller præsentation.
Brug Linq så har du slet ikke de problemer der :)
NB: Det er ikke uden grund at ham der lavede db-designet normaliserede telefonnummeret :) det betyder alt fra 0 til mange og ikke 1 eller 2 ;) Hvis du insisterer på 1 eller 2 og det er dig som er designer, så denormaliser og læg dine telefonnumrer i persontabellen med telefon1 og telefon2, så kan alle se dine klare intentioner ;)
Jeg er helt enig med buzzz og janus_007, at det ikke just er en pæn måde at gøre det på, og janus_007's betragtninger om potentiel udvidelse til >2 telefonnumre, gør at det er en rigtig dårlig løsning.
Synes godt om
Ny brugerNybegynder
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.