Как мне решить этот запрос? - PullRequest
0 голосов
/ 27 мая 2011

Я получаю сообщение об ошибке 3122:

Вы попытались выполнить запрос, который не включает указанное выражение count(*)*t2.Daily_Charge_HKD как часть агрегатной функции

Что я хочу сделать в запросе:

Я хочу сгруппировать все записи в Opt_In_Customer_Record по event_plan_code и получить общее количество для каждого кода, затем я ссылаюсь на daily_charge из таблицы daily_charge по t1.event_plan_code = t2.event_plan_code и умножать daily_charge на общее количество для каждого кода

Вот мой код:

Private Sub btnGenDaily_Click()
    Dim filename As String
    Dim prefix As String
    Dim qryDef As DAO.QueryDef
    Dim dbs As DAO.Database

    Set dbs = OpenDatabase(CurrentDb.Name)

    If IsNull(txtInputPath.value) Then
        MsgBox "Please enter a valid input file location."
    Else
        If FileExists(txtInputPath.value) Then
            If IsNull(txtOutputPath3.value) Then
                MsgBox "Please enter a valid output file location."
            Else
                prefix = GetFileNamePrefix(txtInputPath.value)

                sql = "select t1.event_plan_code, count(*), count(*)*t2.Daily_Charge_HKD " & _
                      "from Opt_In_Customer_Record t1 Inner Join Daily_Charge t2 " & _
                      "On (t1.event_plan_code=t2.event_plan_code and t2.Home_BMO='" & prefix & "') " & _
                      "group by t1.event_plan_code " & _
                      "order by t1.event_plan_code "

                MsgBox sql

                If ObjectExists("Query", "getDailyCharge") Then
                     DoCmd.DeleteObject acQuery, "getDailyCharge"
                End If

                With dbs
                    .QueryTimeout = 0
                    Set QueryDef = .CreateQueryDef("getDailyCharge", sql)
                End With

                strPathToSave = txtOutputPath3.value

                DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "getDailyCharge", strPathToSave, True
                MsgBox "Daily charge report generated."
            End If
        Else
            MsgBox "Input file does not exist. Please enter again."
        End If
    End If

End Sub

Ответы [ 2 ]

0 голосов
/ 31 мая 2011

Наконец-то я придумала это решение, и оно работает:

sql = "select t1.event_plan_code, Count, Count * Daily_Charge_HKD As 'Count * Daily_Charge_HKD'" & _

  "from (select event_plan_code, count(*) As Count " & _
  "from Opt_In_Customer_Record " & _
  "group by event_plan_code " & _
  "order by event_plan_code) t1, Daily_Charge t2 " & _
  "where t1.event_plan_code=t2.event_plan_code and t2.Home_BMO='" & prefix & "' " & _
  "order by t1.event_plan_code"
0 голосов
/ 27 мая 2011

Я знаю, что вы упомянули в комментарии, что вы не хотите группировать по "t2.Daily_Charge_HK", но чтобы использовать это так, как вы делаете с доступом, вам нужно будет сгруппировать его, потому что я присоединилсяЯ предполагаю, что у вас есть только одно значение ежедневного платежа для каждого кода плана событий, поэтому группировка в этом случае не будет проблемой.например, все коды планов мероприятий с идентификатором 1 и домашним BMO с префиксом x будут иметь одинаковую скорость начисления.* Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...