Hells Korzhik 0 / 0 / 0 Регистрация: 24.05.2018 Сообщений: 11 |
||||
1 |
||||
20.03.2020, 19:05. Показов 3592. Ответов 6 Метки microsoft access (Все метки)
Всем доброго дня.
Миниатюры
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
20.03.2020, 19:05 |
6 |
Заблокирован |
|
20.03.2020, 19:22 |
2 |
сделать перекрестный запрос отображающий по отделам количество сотрудников родившихся в каждом месяце и за весь год Если так, то при чём тогда «PIVOT Сотрудники.Фамилия» ? Нарисуйте то что вы хотите получить в начале (лучше в формате nxn) — подумаем.
0 |
mobile 26784 / 14463 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
20.03.2020, 19:29 |
3 |
|||
Решение
перекрестный запрос отображающий по отделам количество сотрудников родившихся в каждом месяце и за весь год Попробуйте. Возможны ошибки, так как не знаю что за таблица Дата2 и зачем она здесь нужна
0 |
0 / 0 / 0 Регистрация: 24.05.2018 Сообщений: 11 |
|
20.03.2020, 22:45 [ТС] |
4 |
Да, я сам крайне запутался, когда создавал данный запрос и создал Дата2 для передачи месяцев в таблицу (См.Фото)-она пустая,и использоваться не будет-так думаю.
0 |
Модератор 5177 / 2574 / 641 Регистрация: 12.06.2016 Сообщений: 6,848 |
|
21.03.2020, 00:11 |
5 |
Предложенный вариант не работает Вижу расхождение — в предложенном варианте PIVOT Format([Дата_рождения],»mmm») А у Вас как? Смотрите внимательнее.
0 |
Hells Korzhik 0 / 0 / 0 Регистрация: 24.05.2018 Сообщений: 11 |
||||
21.03.2020, 00:32 [ТС] |
6 |
|||
Сильно доработал — и получился вот такой вариант.
Миниатюры
0 |
Hells Korzhik 0 / 0 / 0 Регистрация: 24.05.2018 Сообщений: 11 |
||||
21.03.2020, 01:32 [ТС] |
7 |
|||
Все получилось-спасибо за участие!
Миниатюры
0 |
I have written a VBA code in Access. But, I received syntax error in TRANSFORM statement. I would be grateful if you could help me.
Sub TransformX1()
Dim dbs As Database
Dim strSQL As String
Set dbs = CurrentDb
strSQL = "TRANSFORM Sum(BAR1.[TON]) AS SumOfTON" _
& "SELECT BAR1.[MABD],Sum(BAR1.[TON]) AS [Total Of TON]" _
& "FROM BAR1" _
& "WHERE (((BAR1.[MABD]) < 1300) And ((BAR1.[MAGH]) < 1300) And ((BAR1.G) = 1))" _
& "GROUP BY BAR1.[MABD]" _
& "PIVOT BAR1.[MAGH]"
DoCmd.RunSQL strSQL
End Sub
Erik A
31.7k12 gold badges41 silver badges65 bronze badges
asked May 21, 2018 at 8:11
1
If you examine your strSQL variable just before the RunSQL command, you’ll find that you are missing a few spaces. Replace
"TRANSFORM Sum(BAR1.[TON]) AS SumOfTON" _
with
"TRANSFORM Sum(BAR1.[TON]) AS SumOfTON " _
and so on.
answered May 21, 2018 at 8:18
SamSam
5,3361 gold badge18 silver badges32 bronze badges
2
- Remove From My Forums
-
Question
-
I run the following SQL statement and wind up with a ‘Data type mismatch in criteria expression’ error
TRANSFORM Count(*) SELECT Postal_Code, Sex FROM MyTable GROUP BY Postal_Code, Sex PIVOT Switch(GetAge([DOB])<25,"Under 25", GetAge([DOB])<35,"Under 35",GetAge([DOB])<45,"Under 45", TRUE,"45+")
First of all, I dont have a WHERE clause in there so I dont know what it is specifying as ‘criteria’. Can anyone here break this down for me? Basically, what this query is spose to do is return the number of records by Postal_Code and Sex in 4 columns, calculated
using a custom function, GetAge, on the DOB (date) field.Function GetAge&(SomeDate AS Date) GetAge=DateDiff("yyyy", SomeDate, Date) End Function
Thanks for any help
50% of programming is coding. The other 90% is debugging
Answers
-
Thanks for your reply, I really do take that approach and will add it to my arsenal. However, I had found what was causing the error. Nothing was wrong with the construct of the posted SQL statement, there was a Null date in the DOB field of the under
lying table which was causing the problem. Basically it was the GetAge function that was returning the error
50% of programming is coding. The other 90% is debugging
-
Marked as answer by
Thursday, November 17, 2011 7:14 PM
-
Marked as answer by
TRANSFORM
статФункцияинструкцияSelectPIVOTполе[IN (значение_1[,значение_2[,
…]])]
Ниже перечислены
аргументы инструкции TRANSFORM:
Элемент |
Описание |
статФункция |
Статистическая |
инструкцияSelect |
Инструкция SELECT. |
поле |
Поле или выражение, |
значение_1,значение_2 |
Фиксированные |
Когда данные
сгруппированы с помощью перекрестного
запроса, можно выбирать значения из
заданных столбцов или выражений как
заголовки столбцов. Это позволяет
просматривать данные в более компактной
форме, чем при работе с запросом
на выборку.
Инструкция TRANSFORM
является необязательной, но если она
присутствует, то должна быть первой
инструкцией в строке SQL. Она должна
находиться впереди инструкции SELECT,
которая указывает поля, содержащие
заголовки строк, и предложения GROUP BY,
которое задает группировку по строкам.
При желании можно включить и другие
предложения, например WHERE, для описания
дополнительных условий отбора и
сортировки. Кроме того, можно использовать
подчиненные
запросыкак предикаты в
перекрестном запросе, особенно в
предложении WHERE.
Значения, возвращенные
аргументом поле, используются в
качестве заголовков столбцов в
результирующем наборе запроса. Например,
продажи по месяцам в перекрестном
запросе образуют результирующую таблицу
из 12 столбцов. Аргументполеможно
ограничить, чтобы создать заголовки из
фиксированных значений (значение_1,значение_2), перечисленных в
необязательном предложении IN. Кроме
того, фиксированные заголовки, которым
не соответствуют реальные данные, можно
использовать для создания дополнительных
столбцов. В приведенном примере
определяется максимальная сумма заказов
клиентов на основе запросаСуммаПоЗаказам.
TRANSFORM
Max([СуммаПоЗаказам].[ПолнаяСтоимостьСДоставкой])
AS [Max-ПолнаяСтоимостьСДоставкой]
SELECT
[СуммаПоЗаказам].[Название]
FROM СуммаПоЗаказам
GROUP BY
[СуммаПоЗаказам].[Название]
PIVOT
[СуммаПоЗаказам].[КодЗаказа];
Операция union
Создает запрос
на объединение,который объединяет
результаты нескольких независимых
запросов или таблиц.
Синтаксис
[TABLE]
запрос_1
UNION [ALL] [TABLE] запрос_2
[UNION [ALL] [TABLE] запрос_n
[ … ]]
Ниже перечислены
аргументы операции UNION:
Элемент |
Описание |
запрос_1-n |
Инструкция SELECT, имя |
Простой запрос на
объединение
Следующий запрос
на объединение содержит две инструкции
SQL SELECT, определяющие возвращение из
таблиц «Поставщики» и «Клиенты» названий
организаций и городов, находящихся в
указанной стране.
Возврат в начало
Сортировка в запросе
на объединение
В следующем запросе
на объединение отбираются все названия
организаций и городов из таблиц
«Поставщики» и «Клиенты» и выполняется
сортировка по названием городов:
SELECT
[Название], [Город]
FROM
[Поставщики]
UNION
SELECT [Название], [Город]
FROM
[Клиенты]
ORDER
BY [Город];
Переименование полей
в запросе на объединение
В следующем запросе
на объединение поле «Название» получает
при выводе результатов имя «Поставщик/Клиент»:
SELECT
[Название] AS [Поставщик/Клиент], [Город]
FROM
[Поставщики]
UNION
SELECT [Название] AS [Поставщик/Клиент],
[Город]
FROM
[Клиенты];
Дополнительные
сведения
В одной операции
UNION можно объединить в любом наборе
результаты нескольких запросов, таблиц
и инструкций SELECT. В следующем примере
объединяется существующая таблица
«Новые счета» и инструкции SELECT:
TABLE
[Новые
счета]
UNION ALL
SELECT
*
FROM
Клиенты
WHERE
СуммаЗаказа > 1000;
По умолчанию
повторяющиеся записи не возвращаются
при использовании операции UNION, однако
в нее можно добавить предикат ALL, чтобы
гарантировать возврат всех записей.
Кроме того, такие запросы выполняются
быстрее.
Все запросы,
включенные в операцию UNION, должны отбирать
одинаковое число полей; при этом типы
данных и размеры полей не обязаны
совпадать.
Используйте
псевдонимы только в первом предложении
SELECT, потому что в остальных они
пропускаются. В предложении ORDER BY
ссылайтесь на поля по их названиям в
первом предложении SELECT.
Примечания
-
В каждом аргументе запросадопускается
использование предложения GROUP BY или
HAVING для группировки возвращаемых
данных. -
В конец последнего аргумента запросаможно включить предложение ORDER BY, чтобы
отсортировать возвращенные данные.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- Remove From My Forums
-
Question
-
TRANSFORM First (calc_flow_data.hourly_value) AS Firstofhourly_value
SELECT dfd.flow_day_and_hour
FROM rt_emeter_fmeter rtef
JOIN dt_elec_mtr_data demd ON rtef.location_meters_id = demd.location_meters_id
JOIN calc_flow_data cfd ON demd.emeter_id = dfd.emeter_id
JOIN dt_flow_data dfd ON cfd.flow_meter_id = dfd.flow_meter_id
WHERE cfd.energy_meter_descr = ‘kwh’
GROUP BY dfd.flow_day_and_hour
ORDER BY dfd.flow_day_and_hour, rtef.location_id
PIVOT rtef.location_idError:
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ‘cfd’.
Msg 156, Level 15, State 1, Line 11
Incorrect syntax near the keyword ‘PIVOT’.I am trying to work on the correct coding for PIVOT, however I am uncertain to the first error with CFD. I tried changing the second line ( FROM rt_emeter_fmeter rtef ) to calc_flow_data and still had the same issue. Any thoughts?
Thanks,
Answers
-
This is how to make it dynamically:
declare @SQL nvarchar(max), @Cols nvarchar(max) IF OBJECT_ID('tempDB..#TempResults',N'U') IS NOT NULL DROP TABLE #TempResults SELECT dfd.flow_day_and_hour, rtef.location_meters_id, cfd.hourly_value INTO #TempResults -- Save current output into temp table -- hopefully not too much data FROM dt_flow_data dfd JOIN calc_flow_data cfd ON cfd.flow_meter_id = dfd.flow_meter_id JOIN dt_elec_mtr_data demd ON demd.emeter_id = dfd.emeter_id JOIN rt_emeter_fmeter rtef ON rtef.location_meters_id=demd.location_meters_id WHERE cfd.energy_meter_descr = 'kwh' select @Cols = stuff((select ', ' + quotename(LocID) from (select distinct Location_Meters_ID, cast(Location_Meters_ID as varchar(20)) as LocID from #TempResults) src ORDER BY Location_Meters_ID FOR XML PATH('')),1,2,'') SET @SQL = 'SELECT * FROM #TempResults PIVOT (sum(Hourly_Value) FOR Location_Meters_ID IN (' + @Cols + ')) pvt' PRINT @SQL -- for verification only EXECUTE (@SQL)
This is from the top of my head.
For every expert, there is an equal and opposite expert. — Becker’s Law
My blog
-
Marked as answer by
Friday, June 29, 2012 7:25 PM
-
Marked as answer by