Hi Karl!
One problem has arisen that I did not anticipate. When the queries run and
a tie occurs, it does not return anything of the tie. Example:
Mbrs Resort # of Reservations
Gold Spa1 345
Gold Spa3 258
Gold Spa89 125
Gold Spa23 89
Gold Spa9 65
Gold Spa87 65
If this situation it drops the last 2 - is there a way to show the tie
regardless of the ranking?
Here is the code.
1st query
SELECT [Top5-rpt tbl].Expr1 AS Gold, Sum([Top5-rpt tbl].Expr3) AS QTY,
[Top5-rpt tbl].Expr2 AS Proj, [Top5-rpt tbl].Resort
FROM [Top5-rpt tbl]
WHERE ((([Top5-rpt tbl].StartDate) Between [Forms]![PremierDriver]![Text7]
And [Forms]![PremierDriver]![Text10]))
GROUP BY [Top5-rpt tbl].Expr1, [Top5-rpt tbl].Expr2, [Top5-rpt tbl].Resort
ORDER BY [Top5-rpt tbl].Expr1, Sum([Top5-rpt tbl].Expr3) DESC;
2nd Query
SELECT Q.Gold AS Expr1, Q.Proj AS Expr2, Q.QTY AS Expr3, Resorts.Resort,
(SELECT COUNT(*) FROM PremierTDCountqry Q1 WHERE Q1.[Gold] = Q.[Gold]
AND Q1.[QTY] >= Q.[QTY]) AS Rank, [Ownership Table].[Alpha Ownership],
[Ownership Table].SortKey
FROM (PremierTDCountqry AS Q INNER JOIN [Ownership Table] ON Q.Gold =
[Ownership Table].[Ownership Letter]) INNER JOIN Resorts ON Q.Proj =
Resorts.Proj
WHERE ((((SELECT COUNT(*) FROM PremierTDCountqry Q1 WHERE Q1.[Gold] =
Q.[Gold] AND Q1.[QTY] >= Q.[QTY]))<=5))
ORDER BY Q.Gold, Q.QTY DESC;
Bunky said:
Karl,
Thank you for all your assistance; it works fine now. I'm sorry I did not
notice your wording. Sleep deprived taking care of wife will do it everytime.
Thanks again.
KARL DEWEY said:
I'm sorry, did I not explain it well enough when I said "Try these two
queries"?
--
KARL DEWEY
Build a little - Test a little
:
When I try to execute I get a msg that states
"Characters after end of SQL statement."
Should I break these apart into 2 separate queries or are they to run
together?
:
Try these two queries -
tblReswithGold_Count ---
SELECT tblReswithGold.Gold, Count(tblReswithGold.[Res number]) AS QTY,
tblReswithGold.Proj
FROM tblReswithGold
GROUP BY tblReswithGold.Gold, tblReswithGold.Proj
ORDER BY tblReswithGold.Gold, Count(tblReswithGold.[Res number]) DESC;
SELECT Q.Gold, Q.Proj, Q.QTY, (SELECT COUNT(*) FROM tblReswithGold_Count Q1
WHERE Q1.[Gold] = Q.[Gold]
AND Q1.[QTY] >= Q.[QTY]) AS Rank
FROM tblReswithGold_Count AS Q
WHERE ((((SELECT COUNT(*) FROM tblReswithGold_Count Q1
WHERE Q1.[Gold] = Q.[Gold]
AND Q1.[QTY] >= Q.[QTY]))<=5))
ORDER BY Q.Gold, Q.QTY DESC;
--
KARL DEWEY
Build a little - Test a little
:
Gold is the field name for Premier type
Proj is the field name for Resort
Res number is the field name for reservations but this is what I am counting.
Table name is tblReswithGold
I wish to see the top 5 Proj's that Gold are staying at broken down by the
different Gold levels. ie-L for Platinum level, Z for Bronze level, S for
Silver level and G for Gold level. This will be determined by counting the
res numbers for each proj.
OK?
:
Your orignal post read "Now I wish to see only the top 5 resorts these
premier owners visited grouped by the premier type."
I assume that Gold is the field for 'premier type', but what field is the
Resort? Is 'Proj' your 'premier owners'?
Re-state your requirement in terms of the fields names. What is the table
name.
--
KARL DEWEY
Build a little - Test a little
:
Table Structure
Res-Date Date/Time
Proj Number
Res Number Text
Gold Text
Sample Date
Res-Date Proj Res Number Gold
9/1/2008 63 QNP3W S
9/1/2008 22 QNP3Z S
9/3/2008 33 ZXZXZ S
9/3/2008 63 XZXZX S
9/5/2008 63 YTYTY S
9/5/2008 22 UYUYU S
So, I want to see that proj 63 is the top with 3 reservations for type S
followed by proj 22 with 2 reservations and then proj 33 with 1 reservation.
Then find the top 5 for the other Gold types as well.
Does this help?
:
UNTESTED - Try this --
SELECT Q.Type, Q.Resort, Count(Q.Resort) AS [Count of reservations], (SELECT
COUNT(*) FROM YourTable Q1
WHERE Q1.[Type] = Q.[Type]
AND Count(Q1.Resort) < Count(Q.Resort))+1 AS Rank
FROM YourTable AS Q
ORDER BY Q.Type, Count(Q.Resort) DESC;
If this does not work then I need you to post your table structure showing
field names and datatype. Also post sample data.
--
KARL DEWEY
Build a little - Test a little
:
The Type refers to ownership type. We have Bronze, Silver, Gold, and
Platinum. Mgmt wants to know the top 5 rsts each group goes to. So the Gold
may go to Spa1, Spa3, Spa74, Spa89 and Spa70 while the Silver owners go to
Spa74, Spa66, Spa1, Spa 70, and Spa05. All of this is determined by the
number of reservations booked.
:
You have Spa15 as both type A and B. Business Spa15 could be a Casino and
Spa - is this how you intend it?
--
KARL DEWEY
Build a little - Test a little
:
You are close. But this is what I need
Type Resort Count of reservations
A Spa1 98
A Spa21 87
A Spa13 45
A Spa74 24
A Spa15 15
B Spa74 105
B Spa66 56
B Spa89 32
B Spa21 16
B Spa15 11
Thanks for your assistance.
:
Forget my earlier post.
the top 5 resorts these premier owners visited grouped by the premier type.
Is this an example of results you want --
Type Resort
A Spa1 15
A Spa2 9
B Ski1 6
C Casino1 5
B Ski2 3
Try this ---
SELECT TOP 5 TblBunky.type, TblBunky.resort, Count(TblBunky.resort) AS
CountOfresort
FROM TblBunky
GROUP BY TblBunky.type, TblBunky.resort
ORDER BY Count(TblBunky.resort) DESC;
--
KARL DEWEY
Build a little - Test a little
:
Karl,
I am not following the SQL code. Is Q.Group = Premier type? What is
Q.Points? Product Q1 I think is the table name but what is Q1.[Group]= to.
I was trying to put names to your example and failed miserably. My bad- too
many years since I really coded SQL!
:
Use a ranking query with rank set to 5 maximum --
SELECT Q.Group, Q.Points, (SELECT COUNT(*) FROM Product Q1
WHERE Q1.[Group] = Q.[Group]
AND Q1.[Points] < Q.[Points])+1 AS Rank
FROM Product AS Q
WHERE ((((SELECT COUNT(*) FROM Product Q1
WHERE Q1.[Group] = Q.[Group]
AND Q1.[Points] < Q.[Points])+1)<=5))
ORDER BY Q.Group, Q.Points;
--
KARL DEWEY
Build a little - Test a little
:
I have a query that pulls a total of reservations booked by premier owners
and I have then sorted by premier type and resort visited. Now I wish to see
only the top 5 resorts these premier owners visited grouped by the premier
type. I'm sure SQL can do it but just putting 5 in at the top of the query
will not get my results. Ideas??
Thank you for your assistance.