Справка по SQL-запросу, ms sql server 2005 (группировка по и имеющая) - PullRequest
0 голосов
/ 03 августа 2009

Я пишу запрос в MS SQL Server 2005 и у меня возникли проблемы с его запуском. Мне нужно, чтобы мой запрос включал:

  1. Включить все документы за период с 2009-07-20 по 2009-08-04
  2. Включить столбец суммы с помощью поля «Размер»
  3. Включить столбец с количеством записей
  4. Группа по имени

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

Ответы [ 3 ]

2 голосов
/ 03 августа 2009

Поскольку вы запрашиваете поля, которые не являются агрегатами (SUM, COUNT, AVG), вы можете использовать обычный WHERE:

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

Тебе нужен ХАЙВИНГ только в том случае, если ты хочешь ограничить что-либо на основе совокупности, например

HAVING Count(*) > 5

Марк

PS: если вы хотите отображать МБ вместо байтов, используйте этот запрос:

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 голосов
/ 03 августа 2009

Вы должны добавить столбец Имя в список Группировать по .

SELECT Name, count(*) AS FileCount, SUM(Size)
FROM alldocs
WHERE TimeCreated between '2009-07-20' AND '2009-08-04'
GROUP BY Name
0 голосов
/ 03 августа 2009

почему бы и нет

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

...