2009-05-20 8 views
-1

Cette requête delow me donne une erreur:comment obtenir le top dix résultat en sql?

declare @date1 nvarchar(100) , @date2 nvarchar(100) 

select @date1='2009-04-20', @date2='2009-05-20' 

select top 10 t.VisitingCount , t.Page 
    from (
      select Count(Page) as VisitingCount,Page 
       from scr_SecuristLog 
       where Date between @date1 and @date2 
        and [user] in (select USERNAME    
             from scr_CustomerAuthorities 
           ) 
       group by Page order by [VisitingCount] desc 
     ) t

Erreur:

La clause ORDER BY est invalide dans les vues, fonctions en ligne, les tables dérivées, les sous-requêtes et expressions de table commune, à moins que TOP ou FOR XML est également spécifié.

+0

Quelque chose semble erroné ici étant donné la structure de la requête et l'utilisation des sous-requêtes. Peut vous suggérer de fournir les structures de table impliquées pour vous aider à fournir une solution. –

+0

je change ma question .... – Penguen

+0

J'ai vraiment compris l'utilisation de ORDER BY ici –

Répondre

7

Je pense que vous avez manqué Comma

select top 10 t.VisitingCount , t.Page from 

en ligne ci-dessus après t.VisitingCount

+1

J'ajoute une virgule, mais l'erreur a changé. Nouvelle erreur reslut abow. Regardez s'il vous plaît ... – Penguen

+0

c'mon ... son n'est pas autorisé à utiliser ORDER BY dans les sous-requêtes, s'il vous plaît lire le message ERREUR avant de poster la question :) –

+0

Prashant j'ai besoin d'ordre par. Comment puis-je l'utiliser? – Penguen

1
declare @date1 nvarchar(100) , @date2 nvarchar(100) 

select @date1='2009-04-20', @date2='2009-05-20' 

select t.VisitingCount, t.Page from(
select top 10 Count(Page) as VisitingCount,Page from scr_SecuristLog 
where Date between @date1 and @date2 
and [user] in(select USERNAME    
    from scr_CustomerAuthorities) 
group by Page order by [VisitingCount] desc) t order by t.VisitingCount desc
0

Il suffit de spécifier un ordre par l'intérieur de votre vue en ligne:

déclarer @ date1 nvarchar (100), @ date2 nvarchar (100)

select @ date1 = '2009-04-20', @ date2 = '2009-05-20'

Sélectionnez top 10 t.VisitingCount, t.Page de ( sélectionnez un pointage (Page) en tant que VisitingCount, Page from scr_SecuristLog
où date entre @ date1 et date2 @
et [utilisateur] dans (sélectionnez USERNAME
de scr_CustomerAuthorities ORDER BY quelle que soit colonne (s) besoin --you)
groupe par page Trier par [VisitingCount] desc) t

2

sortez l'ordre de la table dérivée "t"

essayez ceci:

declare @date1 nvarchar(100) , @date2 nvarchar(100) 

select @date1='2009-04-20', @date2='2009-05-20' 

select top 10 t.VisitingCount , t.Page 
    from (
      select Count(Page) as VisitingCount,Page 
       from scr_SecuristLog 
       where Date between @date1 and @date2 
        and [user] in (select USERNAME    
             from scr_CustomerAuthorities 
           ) 
       group by Page 
     ) t 
    order by [VisitingCount] desc 
Questions connexes