13. januar 2011 - 21:33
Der er
8 kommentarer og 1 løsning
SELECT T1.*, T2.* ... JOIN... TOP 1 T2.C2
Måske et klasssisk spm. Jeg har to tabeller. T2 indeholder flere match til hver T1 record To forskellige T1 records kan hver matche de samme x records i T2 Jeg vil have alle records fra T1 og de skal hver joines med en matchene record fra T2. Recorden fra T2 skal være den der har det højeste RecID Giver det mening...
Annonceindlæg fra Computerworld it-jobbank
13. januar 2011 - 22:44
#1
SELECT * FROM T2 t2 INNER JOIN (SELECT MAX(RecID) AS ID FROM T2 GROUP BY dit_parent_id) t1 on t1.ID = t2.ID Overstående er starten på løsnigen.
13. januar 2011 - 23:13
#2
WITH cte(RName, CName, RowNum) AS (SELECT R.Name AS RName, C.Name AS CName, ROW_NUMBER() OVER(PARTITION BY R.RegionId ORDER BY CID DESC) AS [RowNum] FROM Regions R INNER JOIN Countries C ON C.RegionId = R.RegionID ) SELECT * from cte where RowNum = 1 Noget ala overstående ... tilpas selv. mvh
13. januar 2011 - 23:14
#3
vælger de lange med højeste CID ... sammen med deres Region Name. mvh
13. januar 2011 - 23:20
#4
Tak... Tror ikke jeg får succes på denne tid af dagen. Giver det et skud i morgen.
14. januar 2011 - 00:23
#5
super ... du giver bare en melding tilbage. mvh
14. januar 2011 - 19:48
#6
Det havde jeg ikke så meget succes med, men ellers tak. Jeg valgte den dovne løsning. 2 step i LINQ klarede opgaven. Smid et svar
14. januar 2011 - 23:09
#7
Svar. Ja, overstående kan du ikke lave effektivt i LINQ, men det burde virke. Hvad er det som ikke virker ? Du kan jo også smide en dynamic sql efter din DB Context. Jeg ville selv gå efter linq løsningen hvis performance ikke betyder noget. mvh
15. januar 2011 - 11:13
#8
Jeg har aldrig brugt WITH, kender ikke Partition By eller funktionen OVER Det gør bl.a. at jeg ikke helt kan gennemskue om Region er T1 eller T2
15. januar 2011 - 13:42
#9
Region med mange Countries Så Region må være din T1 og Countries din T2.
Computerworld tilbyder specialiserede kurser i database-management