Avatar billede mosquito Nybegynder
18. januar 2006 - 20:18 Der er 7 kommentarer og
1 løsning

Select distinct top 10 fra 3 tabeller

Registrations
----------------
regID
empID


Hours
-----------
hourID
hRegID
productID


Products
---------
prID
prName


Ovenstående er tre tabeller, hvor jeg ønsker at returnere en liste med med de seneste 10 anvendte producter. hourID er en automatisk tæller. Jeg har forsøgt nedenstående, men mangler at ordne listen efter den automatiske tæller, så jeg får den seneste registrering som den første og ikke som nu, ordnet efter prName.


ALTER PROCEDURE dbo.GetRecentProducts

        @EmpID nvarchar(50)
AS

    SELECT DISTINCT TOP (10) prID,  prName
    FROM Products
    JOIN Hours ON productID=prID
    JOIN Registrations ON regID=hRegID
    WHERE empID=@EmpID
    GROUP BY prName, prID

ORDER BY hourID  ??? giver en fejl da den ikke er del af min selection

Hvordan løser jeg opgaven bedst?
Avatar billede dr_chaos Nybegynder
18. januar 2006 - 20:25 #1
har du prøvet at tilføje den til din selection ?
Avatar billede mosquito Nybegynder
18. januar 2006 - 20:37 #2
ja, derved får jeg fejlen: Column 'Hours.hourID' is invalid in the selcet list because it is not contained in either an aggregate function or the GOOUP BY clause.
Avatar billede dr_chaos Nybegynder
18. januar 2006 - 20:41 #3
SELECT DISTINCT TOP (10) prID,  prName
    FROM Products
    JOIN Hours ON productID=prID
    JOIN Registrations ON regID=hRegID
    WHERE empID=@EmpID
    GROUP BY prName, prID, hourID
ORDER BY hourID
Avatar billede mosquito Nybegynder
18. januar 2006 - 20:44 #4
har jeg prøvet. får fejlen:

ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Avatar billede dr_chaos Nybegynder
18. januar 2006 - 20:46 #5
SELECT DISTINCT TOP (10) prID,  prName, hourID
    FROM Products
    JOIN Hours ON productID=prID
    JOIN Registrations ON regID=hRegID
    WHERE empID=@EmpID
    GROUP BY prName, prID, hourID
ORDER BY hourID
Avatar billede mosquito Nybegynder
18. januar 2006 - 20:54 #6
løsningen finder ikke distinct for produktet:

prID        prName                                            hrID       
----------- -------------------------------------------------- -----------
1          No product                                        34604     
1          No product                                        34605     
1          No product                                        34606     
1          No product                                        34607     
1          No product                                        34608     
1          No product                                        34609     
1          No product                                        34610     
6          Web creation                                      34611     
1          No product                                        34612     
1          No product                                        34613     
No rows affected.
(10 row(s) returned)
@RETURN_VALUE = 0
Finished running [dbo].[GetRecentProducts]


mit ønske er:

prID        prName                                            hrID       
----------- -------------------------------------------------- -----------
1          No product                                        34612     
6          Web creation                                      34611     
3          ADO                                        34603
<
<
2          Optimizing                                        34590
No rows affected.
(10 row(s) returned)
@RETURN_VALUE = 0
Avatar billede mosquito Nybegynder
18. januar 2006 - 20:56 #7
det skal dog lige siges at jeg ikke skal bruge 'hrID' til andet end at sortere efter og har ikke brug for den i min liste, men kan naturligvis undlade den, hvis ikke den kan undgås.
Avatar billede mosquito Nybegynder
09. marts 2006 - 11:24 #8
kom frem til følgende løsning.

    SELECT DISTINCT TOP(10) prID, prName, MAX(regDate)
   
    FROM Products
   
    JOIN Hours ON hrProductID=prID
    JOIN Registrations ON regID=hrRegID
   
    WHERE regEmpID=@EmpID
   
    GROUP BY prName, prID
    ORDER BY MAX(regDate) DESC

Det ser ikke ud til at jeg kan undgå at få datoen med i min visning, men udelader den bare i den videre kode.

spørgsmålet lukkes
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