2013-09-02 5 views
-1

Я довольно новичок в vba и sql, и у меня есть небольшая проблема с импортом некоторых данных из моего запроса на базу данных в excel через vba.VBA SQL Aggregate Function Issue

У меня есть следующий sql, генерирующий запрос в Access, который не отображает результаты запроса.

SELECT tblSection.Section_Name, 
     IIf(Sum(qry_Total_Assigned_MB.[Total Assigned Main Book]) Is Null,0, 
      Sum(qry_Total_Assigned_MB.[Total Assigned Main Book])) As [Total MB Assigned], 
     IIf(Sum([qry_Total_Shoot_Complete_MB].[Total MB Product Shoot Complete]) Is Null,0, 
      Sum([qry_Total_Shoot_Complete_MB].[Total MB Product Shoot Complete])) As [Total MB Product Shoot Complete], 
     IIf(Sum(qry_Total_Assigned_MidB.[Total Assigned Mid Book]) Is Null,0, 
      Sum(qry_Total_Assigned_MidB.[Total Assigned Mid Book])) As [Total MidB Assigned], 
     IIf(Sum([qry_Total_Shoot_Complete_MidB].[Total MidB Product Shoot Complete]) Is Null,0, 
      Sum([qry_Total_Shoot_Complete_MidB].[Total MidB Product Shoot Complete])) As [Total MidB Product Shoot Complete], 
     IIf(Sum([qry_Total_Assigned_ECA].[Total Assigned ECA]) Is Null,0, 
      Sum([qry_Total_Assigned_ECA].[Total Assigned ECA])) As [Total ECA Assigned], 
     IIf(Sum([qry_Total_Assigned_ECOMM].[Total Assigned ECOMM]) Is Null,0, 
      Sum([qry_Total_Assigned_ECOMM].[Total Assigned ECOMM])) As [Total ECOMM Assigned], 
     IIf(Sum([qry_Total_Assigned_Marketing].[Total Assigned Marketing]) Is Null,0, 
      Sum([qry_Total_Assigned_Marketing].[Total Assigned Marketing])) As [Total Marketing Assigned], 
     IIf([Total MB Assigned]=0,"0",IIf([Total MB Product Shoot Complete]=0,"0", 
      ([Total MB Product Shoot Complete])/([Total MB Assigned]))) As [Percentage MB Complete] 

FROM ((((((tblSection 
     LEFT JOIN qry_Total_Assigned_MB 
      ON tblSection.Section_Name = qry_Total_Assigned_MB.Section_Name) 
     LEFT JOIN qry_Total_Assigned_MidB 
      ON tblSection.Section_Name = qry_Total_Assigned_MidB.Section_Name) 
     LEFT JOIN qry_Total_Assigned_ECA 
      ON tblSection.Section_Name = qry_Total_Assigned_ECA.Section_Name) 
     LEFT JOIN qry_Total_Assigned_ECOMM 
      ON tblSection.Section_Name = qry_Total_Assigned_ECOMM.Section_Name) 
     LEFT JOIN qry_Total_Assigned_Marketing 
      ON tblSection.Section_Name = qry_Total_Assigned_Marketing.Section_Name) 
     LEFT JOIN qry_Total_Shoot_Complete_MB 
      ON tblSection.Section_Name = qry_Total_Shoot_Complete_MB.Section_Name) 
     LEFT JOIN qry_Total_Shoot_Complete_MidB 
      ON tblSection.Section_Name = qry_Total_Shoot_Complete_MidB.Section_Name 
GROUP BY tblSection.Section_Name; 

Я тогда пытаюсь использовать VBA, чтобы вытащить записи данных из запроса, полученный с использованием приведенной ниже инструкции SQL с помощью VBA в Excel:

SELECT [Total MB Assigned] 
FROM qry_MI_Total_Assigned 
WHERE [Section_Name] = '" & fnSection_Name & "' 
GROUP BY [Section_Name]; 

При выполнении приведенной выше коды я получаю следующее сообщение об ошибке :

You tired to execute a query that does not include the specified expression 'IIf(IIf(Is Null,0,)=0,"0", IIf([Total MB Product Shoot Complete]=0, "0",[Total MB Product Shoot Complete]/[Total MB Assigned]))' as part of an aggregate function."

Если кто-то может мне точку в правильном направлении, или, если я делаю это совершенно неправильно, я был бы очень благодарен!

ответ

0

Ваше сообщение об ошибке достаточно понятны, в следующем запросе:

SELECT [Total MB Assigned] 
FROM qry_MI_Total_Assigned 
WHERE [Section_Name] = '" & fnSection_Name & "' 
GROUP BY [Section_Name]; 

У вас есть в списке выбора [Total MB Assigned], но не в агрегатной функции или часть группы по. Поскольку qry_MI_Total_Assigned является сохраненным запросом, сообщение об ошибке просто дает вам полное определение этого столбца.

Поскольку запрос qry_MI_Total_Assigned уже группы по [Section_Name] Я думаю, что ваш GROUP BY является излишним, и Theat следующий будет работать, как вы ожидаете

SELECT [Total MB Assigned] 
FROM qry_MI_Total_Assigned 
WHERE [Section_Name] = '" & fnSection_Name & "'