[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1540
  • Last Modified:

How do I sort/order a group by count in Access?

Hi.

Im using Access 2010, working in an ADP-file. I have extracted some tables from a sql-database. Then I have made a View where want to extract som data. What I have to do is make a view of number of students and years grouped by year and sorted by count of student each year but it doesnt work.  

If you look at the View I have made you can see that it is grouped by Immaar (means year) but not sorted by Count in descending order (it is count of studentID. Each student has his/her own ID).

What i want to have in view is this:

2007 6
2008 6
2005 4
2006 4
2002 2
2004 2
2009 1

My code is this:

SELECT      TOP 100 PERCENT Immaar, COUNT(StudentID) AS Number
FROM          dbo.Student
GROUP BY Immaar
ORDER BY COUNT(StudentID) DESC



Screenshot.jpg
0
Hans_Christian
Asked:
Hans_Christian
  • 5
  • 4
  • 2
  • +2
3 Solutions
 
gamarrojgqCommented:
Hi,
 
Try this

SELECT      TOP 100 PERCENT Immaar, COUNT(StudentID) AS Number
FROM          dbo.Student
GROUP BY Immaar
ORDER BY 2 DESC
0
 
Hans_ChristianAuthor Commented:
That didn't do it. The result order is the exact same as the screenshot above. What happens is that Access automatically changes the "2" back to "COUNT(StudentID)" when you click outside the code.
0
 
gamarrojgqCommented:
weird, ok try this

SELECT Immaar, Number FROM (
SELECT      TOP 100 PERCENT Immaar, COUNT(StudentID) AS Number
FROM          dbo.Student
GROUP BY Immaar
) AS DATA
ORDER BY Number DESC
0
Configuration Guide and Best Practices

Read the guide to learn how to orchestrate Data ONTAP, create application-consistent backups and enable fast recovery from NetApp storage snapshots. Version 9.5 also contains performance and scalability enhancements to meet the needs of the largest enterprise environments.

 
Hans_ChristianAuthor Commented:
Nothing happens. The sort order is still the same. The code changes to this, when clicking outside the code-area:

SELECT      TOP 100 PERCENT Immaar, Number
FROM          (SELECT      TOP 100 PERCENT Immaar, COUNT(StudentID) AS Number
                        FROM           dbo.Student
                        GROUP BY Immaar) DATA
ORDER BY Number DESC


It added "TOP 100 PERCENT" in the top and changed "AS DATA" to "DATA". I can see what your intentions were. Putting a table around the original. But it didnt do it either.
0
 
gamarrojgqCommented:
ok, my bad I have not read that this is a View, lets try this one

SELECT * FROM (
SELECT      TOP 99 PERCENT Immaar, COUNT(StudentID) AS Number
FROM          dbo.Student
GROUP BY Immaar
GROUP BY COUNT(StudentID) DESC
) AS DATA

0
 
gamarrojgqCommented:
Sorry again the second  GROUP BY  is actually a SORT BY
0
 
Hans_ChristianAuthor Commented:
Now I get an error message. Error in group by clause. Im not sure it will accept to group by Count(StudentID). I tried that earlier with no luck. And now its sudden 99 Percent and not 100?

The code changes to this when clicking outside after pasting your code:

SELECT      *
FROM          (SELECT      TOP 99 PERCENT Immaar, COUNT(StudentID) AS Number
                        FROM           dbo.Student
                        GROUP BY Immaar
                        GROUP BY COUNT(StudentID) DESC) AS DATA

0
 
ZtinelCommented:
try this:
SELECT      TOP (99.999999) PERCENT Immaar, COUNT(StudentID) AS Number
FROM          dbo.Student
GROUP BY Immaar
ORDER BY COUNT(StudentID) DESC

0
 
Jeffrey CoachmanCommented:
This works fine for me, it produces the exact output you requrested
...or am I missing something...

SELECT Student.Immaar, Count(Student.StudentID) AS [Number]
FROM Student
GROUP BY Student.Immaar, Student.Immaar
ORDER BY Count(Student.StudentID) DESC , Student.Immaar;

JeffCoachman
0
 
ZtinelCommented:
0
 
gamarrojgqCommented:
Sorry fot that, the second  GROUP BY  is actually a SORT BY, so it will be

SELECT * FROM (
SELECT      TOP 99 PERCENT Immaar, COUNT(StudentID) AS Number
FROM          dbo.Student
GROUP BY Immaar
ORDER BY COUNT(StudentID) DESC
) AS DATA

Yes try it with 99, this  is a workaround
0
 
Anthony PerkinsCommented:
If this is SQL Server you should not be using TOP 100 PERCENT ... ORDER BY it is simply pointless.  SQL Server is smart enough to see that you want all the rows and skip the sort entirely.

And if it is not SQL Server than perhaps you should not be posting in this zone...
0
 
Anthony PerkinsCommented:
Here is what you need to do:
Create your VIEW without an ORDER BY clause.
Execute it with the ORDER BY clause.

Here are the steps:
Do not use Design mode, use the Query window instead.
Step 1. Create your VIEW

CREATE VIEW vw_MyViewNameGoesHere

As

SELECT  Immaar,
        COUNT(*) Number
FROM    dbo.Student
GROUP BY Immaar

Step 2.  Execute it as follows:

SELECT Immaar, Number
FROM vw_MyViewNameGoesHere
ORDER BY Number
0
 
Hans_ChristianAuthor Commented:
gamarrojqq: That did it! Thanks. The workaround.

Ztinel: Thanks for the link read it with interest.

acperkins. Thanks for that information.

0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

  • 5
  • 4
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now