I've thought about this question for an issue I had once, and I could only
figure out how to do it in VBA code. Here's my solution:
Public Function GetTop10CampaignWaves()
On Error Resume Next
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim sql As String
Dim lID As Long
Dim sOutSQL As String
Set dbs = CurrentDb
sql = "SELECT DISTINCT TOP 10 CampaignID FROM tblWave " & _
"ORDER BY CampaignID DESC"
Set rst = dbs.OpenRecordset(sql, dbOpenSnapshot)
Do Until rst.EOF
lID = Nz(rst!CampaignID)
If Len(sOutSQL) > 0 Then sOutSQL = sOutSQL & " UNION "
sOutSQL = sOutSQL & "SELECT TOP 10 CampaignID, PromoCode " & _
"FROM tblWave WHERE CampaignID=" & lID & vbCrLf
rst.MoveNext
Loop
Set qdf = dbs.QueryDefs("qryTopTenPromoCodes")
qdf.sql = sOutSQL
Debug.Print sOutSQL
DoCmd.OpenQuery "qryTopTenPromoCodes"
Set qdf = Nothing
Set rst = Nothing
Set dbs = Nothing
End Function
Resulting SQL:
SELECT TOP 10 CampaignID, PromoCode FROM tblWave WHERE CampaignID=98
UNION SELECT TOP 10 CampaignID, PromoCode FROM tblWave WHERE CampaignID=97
UNION SELECT TOP 10 CampaignID, PromoCode FROM tblWave WHERE CampaignID=96
UNION SELECT TOP 10 CampaignID, PromoCode FROM tblWave WHERE CampaignID=95
UNION SELECT TOP 10 CampaignID, PromoCode FROM tblWave WHERE CampaignID=94
UNION SELECT TOP 10 CampaignID, PromoCode FROM tblWave WHERE CampaignID=93
UNION SELECT TOP 10 CampaignID, PromoCode FROM tblWave WHERE CampaignID=92
UNION SELECT TOP 10 CampaignID, PromoCode FROM tblWave WHERE CampaignID=91
UNION SELECT TOP 10 CampaignID, PromoCode FROM tblWave WHERE CampaignID=90
UNION SELECT TOP 10 CampaignID, PromoCode FROM tblWave WHERE CampaignID=89