Запрос в Екселе

Gena108
Дата: 08.12.2009 18:09:15
Добрый день.
Не могу понять как мне написать в Екселе вложенный запрос. Один запрос я написал, потом вроде бы понимаю как написать второй запрос, но как это сделать в одном не знаю.
1.
Sub План_факт()
    Dim StMyDate As String
    Dim BStatistics As Workbook
    Dim BStatisticsR As Worksheet, BStatisticsN As Worksheet
    Set BStatisticsN = Worksheets("План_факт")
    Dim wb As String, strsql As String
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    wb = ActiveWorkbook.FullName
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & wb & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    strsql = "SELECT [Report$].[Филия] AS Филия, [Report$].[Канал продаж] AS Канал,[Report$].[Месяц] AS Месяц,[Report$].[Год] AS Год, Count([Report$].[Филия]) AS Факт " & _
        "FROM [Report$] " & _
        "GROUP BY [Report$].[Филия],[Report$].[Канал продаж],[Report$].[Месяц],[Report$].[Год]"
        
    Set rs = New ADODB.Recordset
        rs.Open strsql, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
     With BStatisticsN
         .Rows("2:30000").Clear
         .Range("A2").CopyFromRecordset rs
    End With
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing
   
 End Sub
2. Запрос
strsql = "SELECT [Факт$]*, Sum(IIf(([Планы_агр$].[Месяц]=[Факт$].[Месяц] And [Планы_агр$].[Филия]=[Факт$].[Филия] And [Планы_агр$].[Канал продаж]=[Факт$].[Канал продаж]),[Факт$].[Факт],0)) AS План
mds_world
Дата: 08.12.2009 19:22:39
Gena108
Не могу понять как мне написать в Екселе вложенный запрос.

А что вы хотите получить из вложенного запроса? И по каким полям связать его с внешним?
Gena108
Дата: 09.12.2009 09:58:30
В первом запросе из реестра продаж считается факт. А вторым запросом нужно получить план фактную таблицу. Таблица "План" и "Факт" индентичны по структуре:
Филия, Канал продаж, Месяц, Год и План или Факт соответственно
qwrqwr
Дата: 09.12.2009 10:08:28
Gena108
В первом запросе из реестра продаж считается факт. А вторым запросом нужно получить план фактную таблицу. Таблица "План" и "Факт" индентичны по структуре:
Филия, Канал продаж, Месяц, Год и План или Факт соответственно
Так сразу и свяжите в предложении FROM ваши 2 таблицы (если какого-то месяца/канала в одной из них может не быть - используйте LEFT/RIGHT JOIN)
... FROM [Report$] INNER JOIN [Планы_агр$] ON [Планы_агр$].[Месяц]=[Факт$].[Месяц] And [Планы_агр$].[Филия]=[Факт$].[Филия] And [Планы_агр$].[Канал продаж]=[Факт$].[Канал продаж]..
.
Gena108
Дата: 09.12.2009 10:36:22
Выдает ошибку синтаксиса в операции JOIN, не могу понять почему
strsql = "SELECT [Report$].[Филия] AS Филия, [Report$].[Канал продаж] AS Канал,[Report$].[Месяц] AS Месяц,[Report$].[Год] AS Год, Count([Report$].[Филия]) AS Факт " & _
        "FROM [Report$] INNER JOIN [Планы_агр$] ON [Планы_агр$].[Месяц]=[Факт$].[Месяц] And [Планы_агр$].[Филия]=[Факт$].[Филия] And [Планы_агр$].[Канал продаж]=[Факт$].[Канал продаж]" & _
        "GROUP BY [Report$].[Филия],[Report$].[Канал продаж],[Report$].[Месяц],[Report$].[Год]"
.
Также мне не понятно, как этот запрос работает с еще не созданной таблицей "Факт"
qwrqwr_
Дата: 09.12.2009 10:50:12
qwrqwr

... FROM [Report$] INNER JOIN [Планы_агр$] ON [Планы_агр$].[Месяц]=[Факт$].[Месяц] And [Планы_агр$].[Филия]=[Факт$].[Филия] And [Планы_агр$].[Канал продаж]=[Факт$].[Канал продаж]...
ну промахнулся, но надо же вдумчиво копипастить...
... FROM [Report$] INNER JOIN [Планы_агр$] 
 ON [Планы_агр$].[Месяц]=[Report$].[Месяц] 
And [Планы_агр$].[Филия]=[Report$].[Филия] 
And [Планы_агр$].[Канал продаж]=[Report$].[Канал продаж] 
And [Планы_агр$].[Год]=[Report$].[Год]...
где-то так, конечно же...
Gena108
Дата: 09.12.2009 11:10:38
Спасибо, большое.
Gena108
Дата: 09.12.2009 11:36:19
А как же вывести поле "План" из таблицы "План_агр"?
qwrqwr
Дата: 09.12.2009 11:39:36
Gena108
А как же вывести поле "План" из таблицы "План_агр"?
может надо включить его в список полей селекта и в список полей группировки?
Gena108
Дата: 09.12.2009 11:42:02
Спасибо. В поле Селект включил, а в поле группировки нет, поэтому и не работало. Сейчас вроде бы работает