Добрый день. Прошу помочь разобраться почему напротив названия выстраивается 4 показателя, хотя должен только один. Показатели нужны именно из таблицы Критерии, а не из той же, в которой сами названия - Спецификация.
написал: Добавьте в значения сводной любую колонку с таблицы Спецификация
Да, но только у меня все равно проблема. Мне не нужны значения из таблицы Спецификация, мне нужны значения из третьей таблицы, которая будет связана по полю Категория со Спецификацией через Справочник. И, если я перетягиваю в Значения какое-то значение из третьей таблицы, то оно четверится.
Partizano _pl написал: Да, но только у меня все равно проблема.
а что Вы хотите получить на выходе? В таблице с ценами есть только категории. Зачем Вы суете в сводную "наименование" из "Спецификации", если этих данных нет в таблице с ценами? Либо пример составлен не верно, либо я не понимаю Ваши хотелки.
Partizano _pl написал: Да, но только у меня все равно проблема.
а что Вы хотите получить на выходе? В таблице с ценами есть только категории. Зачем Вы суете в сводную "наименование" из "Спецификации", если этих данных нет в таблице с ценами? Либо пример составлен не верно, либо я не понимаю Ваши хотелки.
Есть две таблицы. В одной есть категории и цена каждой категории, во второй - товар, который относится к каждой из категорий. Нужно создать третью, в которой будет товар с ценой, соответствующей той категории, к которой он принадлежит. Вроде все просто. Но, когда я собираю таблицу, и вставляю товар из дной таблицы, а категорию из второй, то рассчитываю на то, что excel по связям сопоставит к какой категории относится этот товар и в третьей колонке выдаст цену нужной категории. А по факту высвечиваются все 4 категории, вместо одной к каждому товару, и 4 цены.
Еще 2 варианта SQL запросом (см Лист1 и Лист2 во вложении) код:
Код
Private Sub CREATE()
Dim myConnect As Object, mySQL As String, myRecord As Object, QT As QueryTable
Dim DataRange As String, strAddress As String, wshTarget As Worksheet
Set myConnect = CreateObject("ADODB.Connection")
myConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ActiveWorkbook.FullName & ";" & _
"Extended Properties=""Excel 12.0;HDR=YES"""
Set myRecord = CreateObject("ADODB.Recordset")
mySQL = "SELECT [Наименование], [Категория], (SELECT [Цена] FROM [Цена$] WHERE [Цена$].[Категория] =[Спецификация$].[Категория]) as [Цена] FROM [Спецификация$] WHERE [Наименование] IS NOT NULL ORDER BY [Наименование] "
myRecord.Open mySQL, myConnect
Set wshTarget = Worksheets("Лист1")
With wshTarget
.Cells.Clear
Set QT = .QueryTables.Add(myRecord, .Range("A1"))
QT.Refresh
End With
Dim conn
For Each conn In ActiveWorkbook.Worksheets("Лист1").QueryTables
conn.Delete
Next conn
Set QT = Nothing
myRecord.Close
Set myRecord = Nothing
End Sub
Private Sub CREATE_2()
Dim myConnect As Object, mySQL As String, myRecord As Object, QT As QueryTable
Dim DataRange As String, strAddress As String, wshTarget As Worksheet
Set myConnect = CreateObject("ADODB.Connection")
myConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ActiveWorkbook.FullName & ";" & _
"Extended Properties=""Excel 12.0;HDR=YES"""
Set myRecord = CreateObject("ADODB.Recordset")
mySQL = "SELECT [Категория], (SELECT COUNT([Наименование]) FROM [Спецификация$] WHERE " & _
"[Спецификация$].[Категория]=[Справочник$].[Категория]) as [Количество], " & _
"[Количество] * (SELECT [Цена] FROM [Цена$] WHERE [Цена$].[Категория] =[Справочник$].[Категория]) as [Цена] " & _
"FROM [Справочник$] WHERE [Категория] IS NOT NULL"
myRecord.Open mySQL, myConnect
Set wshTarget = Worksheets("Лист2")
With wshTarget
.Cells.Clear
Set QT = .QueryTables.Add(myRecord, .Range("A1"))
QT.Refresh
End With
Dim conn
For Each conn In ActiveWorkbook.Worksheets("Лист2").QueryTables
conn.Delete
Next conn
Set QT = Nothing
myRecord.Close
Set myRecord = Nothing
End Sub