SQL query help, ms sql server 2005 (group by and having)
-
10-07-2019 - |
Question
I writing a query within ms sql server 2005 and having some trouble getting it to run. I need my query to include:
- Include all docs from Date Range 2009-07-20 to 2009-08-04
- Include a Sum column using the 'Size' field
- Include a record count column
- Group By Name
select Name, count(*) AS FileCount, SUM(Size)
From alldocs
Group by DirName
HAVING TimeCreated >= '2009-07-20' AND
TimeCreated <= '2009-08-04'
Solution
Since you're querying on fields that are not aggregates (SUM, COUNT, AVG), you can use a normal WHERE:
SELECT
DirName, count(*) AS FileCount, SUM(Size)
FROM
alldocs
WHERE
TimeCreated >= '2009-07-20'
AND TimeCreated <= '2009-08-04'
GROUP BY
DirName
You only need the HAVING if you want to limit something based on an aggreate, e.g.
HAVING Count(*) > 5
Marc
PS: If you want to display MB instead of bytes, use this query:
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
OTHER TIPS
why not
select Name, count(*) AS FileCount, SUM(Size)
From alldocs
WHERE TimeCreated between '2009-07-20' AND '2009-08-04'
Group by DirName
?
You should add the Name column to the Group By list.
SELECT Name, count(*) AS FileCount, SUM(Size)
FROM alldocs
WHERE TimeCreated between '2009-07-20' AND '2009-08-04'
GROUP BY Name
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow