Under forudsaetning af at det er noget som du tilgaard fra et program saa synes det mest logisk at foerst lave en query paa tabel 1 og saa konstruere query paa tabel 2 udfra denne.
Tak for dit svar. Jeg arbejder desværre ikke i et program, men forsøger at lave et enkelt select statement, der henter dataene.
Umiddelbart ville jeg tro, at det kunne være noget lignende
SELECT Kundenummer, (SELECT COL1 FROM TABEL1 b WHERE b.Kundenummer = a.Kundenummer) VAL_COL1, (SELECT COL2 FROM TABEL1 b WHERE b.Kundenummer = a.Kundenummer) VAL_COL2 FROM TABEL2 a
Så en slags... SELECT Kundenummer, Værdi for kolonnen med navnet (SELECT COL1 FROM TABEL1 b WHERE b.Kundenummer = a.Kundenummer) VAL_COL1, ( Værdi for kolonnen med navnet SELECT COL2 FROM TABEL1 b WHERE b.Kundenummer = a.Kundenummer) VAL_COL2 FROM TABEL2 a
select kundenummer, col1, col2 from tabel1 ) , data2 as ( select kundenummer,val_col1,val_col2 from tabel2 )
select a.Kundernummer,a.col1,a.col2,b.val_col1,b.val_col2 from data a inner join data2 b on a.kundernummer = b.kundenummer
inner join eller left join er op til dig
Synes godt om
Slettet bruger
19. november 2015 - 09:10#5
Læste måske dit spm forkert.
Men med ovenstående kan du joine dine rækker sammen. Ellers skal du lave PIVOT som arne skriver:)
Du opstiller det lidt rodet synes jeg - Hvad er formålet og hvorfor er det så ustruktureret dine tabeller?
Synes godt om
Slettet bruger
19. november 2015 - 15:02#6
Et select som dette vil finde de rigtige data - men man kan ikke blande datatype i samme kolonne, så der skal der bruges CAST eller CONVERT.
select t1.Kundenummer ,case when t1.Col1 = 'KUNDENAVN' then cast((select max(Kundenavn) from Tabel2 where Kundenummer = t1.Kundenummer) as varchar) when t1.Col1 = 'KUNDETYPE' then cast((select max(Kundetype) from Tabel2 where Kundenummer = t1.Kundenummer) as varchar) when t1.Col1 = 'KUNDEGRUPPE' then cast((select max(Kundegruppe) from Tabel2 where Kundenummer = t1.Kundenummer) as varchar) when t1.Col1 = 'PRISLISTE' then cast((select max(Prisliste) from Tabel2 where Kundenummer = t1.Kundenummer) as varchar) end Val_Col1 ,case when t1.Col2 = 'KUNDENAVN' then cast((select max(Kundenavn) from Tabel2 where Kundenummer = t1.Kundenummer) as varchar) when t1.Col2 = 'KUNDETYPE' then cast((select max(Kundetype) from Tabel2 where Kundenummer = t1.Kundenummer) as varchar) when t1.Col2 = 'KUNDEGRUPPE' then cast((select max(Kundegruppe) from Tabel2 where Kundenummer = t1.Kundenummer) as varchar) when t1.Col2 = 'PRISLISTE' then cast((select max(Prisliste) from Tabel2 where Kundenummer = t1.Kundenummer) as varchar) end Val_Col2 from Tabel1 t1
Jeg har ikke haft mulighed for at se på jeres besvarelser endnu. Jeg tror rahp måske har en løsning jeg kan bruge.
Jeg beklager strukturen i tabellerne virker rodet. Baggrunden er egentlig OK, men vil nok være lidt kompleks at forklare her. Jeg forsøger i princippet blot at genskabe en logik i en SQL som vores ERP anvender til at finde en pris på en given vare. Og til det har jeg behov for at finde værdien af et vilkårligt felt i kundestamdata, defineret af værdien i et felt i en anden tabel. Jeg kigger på jeres løsningsforslag og vender tilbage... Tak for hjælpen
-- Udfør forespørgsel... SELECT t1.KUNDENUMMER, CASE WHEN t1.COL1 = 'KUNDETYPE' THEN t2.KUNDETYPE WHEN t1.COL1 = 'KUNDEGRUPPE' THEN t2.KUNDEGRUPPE WHEN t1.COL1 = 'PRISLISTE' THEN t2.PRISLISTE ELSE NULL END AS COL1_VAL, CASE WHEN t1.COL2 = 'KUNDETYPE' THEN t2.KUNDETYPE WHEN t1.COL2 = 'KUNDEGRUPPE' THEN t2.KUNDEGRUPPE WHEN t1.COL2 = 'PRISLISTE' THEN t2.PRISLISTE ELSE NULL END AS COL2_VAL FROM #tabel1 AS t1 INNER JOIN #tabel2 AS t2 ON t1.KUNDENUMMER = t2.KUNDENUMMER;
Resultat: KUNDENUMMER COL1_VAL COL2_VAL ----------- ---------- ---------- 1234 12 A 2345 A 99
(2 row(s) affected)
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.