2009-08-03 6 views
0

J'écris une requête dans ms sql server 2005 et j'ai du mal à la faire fonctionner. Je dois ma requête pour inclure:Aide à la requête SQL, ms sql server 2005 (group by et having)

  1. Inclure tous les documents de plage de dates 2009-07-20 à 2009-08-04
  2. Inclure une colonne Somme en utilisant le champ « Taille »
  3. Inclure un nombre record colonne
  4. Groupe par Nom

select Name, count(*) AS FileCount, SUM(Size) 
From alldocs 
Group by DirName 
HAVING TimeCreated >= '2009-07-20' AND 
TimeCreated <= '2009-08-04' 

Répondre

2

Puisque vous vous interrogez sur les champs qui ne sont pas des agrégats (SUM, COUNT, AVG), vous pouvez utiliser une normale OÙ:

SELECT 
    DirName, count(*) AS FileCount, SUM(Size) 
FROM 
    alldocs 
WHERE 
    TimeCreated >= '2009-07-20' 
    AND TimeCreated <= '2009-08-04' 
GROUP BY 
    DirName 

Vous avez seulement besoin having si vous voulez limiter quelque chose basé sur un aggreate, p.ex.

HAVING Count(*) > 5 

Marc

PS: Si vous voulez afficher Mo au lieu d'octets, utilisez cette requête:

SELECT 
    DirName, count(*) AS FileCount, SUM(Size)/(1024*1024) as 'Size MB' 
FROM 
    alldocs 
WHERE 
    TimeCreated >= '2009-07-20' AND TimeCreated <= '2009-08-04' 
GROUP BY 
    DirName 
+0

est-il un moyen facile d'exécuter une conversion sur le champ de taille afin que s'affiche MB versets Bytes? –

0

wh y pas

select Name, count(*) AS FileCount, SUM(Size) 
From alldocs 
WHERE TimeCreated between '2009-07-20' AND '2009-08-04' 
Group by DirName 

?

+0

Voulez-vous changer le nom du champ? – adatapost

0

Vous devez ajouter le Nom colonne au groupe Par liste .

SELECT Name, count(*) AS FileCount, SUM(Size) 
FROM alldocs 
WHERE TimeCreated between '2009-07-20' AND '2009-08-04' 
GROUP BY Name 
Questions connexes