Ошибка синтаксиса в инструкции transform access

Search code, repositories, users, issues, pull requests…

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Hells Korzhik

0 / 0 / 0

Регистрация: 24.05.2018

Сообщений: 11

1

20.03.2020, 19:05. Показов 3789. Ответов 6

Метки microsoft access (Все метки)


Студворк — интернет-сервис помощи студентам

Всем доброго дня.
Возникла такая задача-проблема: необходимо сделать перекрестный запрос отображающий по отделам количество сотрудников родившихся в каждом месяце и за весь год. В целом мне понятна конструкция запроса — но совершенно ничего не выходит и даже идей нет, как несложно догадаться я начинающий)
Код

SQL
1
2
3
4
5
6
7
8
TRANSFORM Coun tFormat(DATA,"mmmm") AS [Sum-Количество]
SELECT Фамилия, COUNT(Сотрудники.дата_рождения) AS ГОД, Format([Дата_рождения],"mm")
 IN ("янв","фев","мар","апр","май","июн","июл","авг","сен","окт","ноя","дек")
 
FROM Сотрудники INNER JOIN Дата2 ON Сотрудники.Дата_рождения = Дата2.Месяц
WHERE Дата_рождения Format(DATA,"mmmm");
GROUP BY Сотрудники.Дата_рождения
PIVOT Сотрудники.Фамилия;

Миниатюры

Перекрестный запрос Microsoft Access
 



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

20.03.2020, 19:05

6

Eugene-LS

Заблокирован

20.03.2020, 19:22

2

Цитата
Сообщение от Hells Korzhik
Посмотреть сообщение

сделать перекрестный запрос отображающий по отделам количество сотрудников родившихся в каждом месяце и за весь год

Если так, то при чём тогда «PIVOT Сотрудники.Фамилия» ?
Нужно же: «по отделам количество сотрудников» … — не понятно.

И что за табличка у вас в «Дата2» ?
судя по : INNER JOIN Дата2 ON …

Нарисуйте то что вы хотите получить в начале (лучше в формате nxn) — подумаем.
У вас в поле Дата_рождения что забито ? текст — число?



0



mobile

Эксперт MS Access

26799 / 14478 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.03.2020, 19:29

3

Лучший ответ Сообщение было отмечено ltv_1953 как решение

Решение

Цитата
Сообщение от Hells Korzhik
Посмотреть сообщение

перекрестный запрос отображающий по отделам количество сотрудников родившихся в каждом месяце и за весь год

Попробуйте. Возможны ошибки, так как не знаю что за таблица Дата2 и зачем она здесь нужна

SQL
1
2
3
4
5
TRANSFORM COUNT(*) AS [Sum-Количество]
SELECT Отдел, COUNT(*) AS ГОД, 
FROM Сотрудники
GROUP BY Отдел
PIVOT Format([Дата_рождения],"mmm") IN ("янв","фев","мар","апр","май","июн","июл","авг","сен","окт","ноя","дек")



0



0 / 0 / 0

Регистрация: 24.05.2018

Сообщений: 11

20.03.2020, 22:45

 [ТС]

4

Да, я сам крайне запутался, когда создавал данный запрос и создал Дата2 для передачи месяцев в таблицу (См.Фото)-она пустая,и использоваться не будет-так думаю.
Поле Даты_рождения это «Дата и время»(см. фото2)
Предложенный вариант не работает-пишет «Ошибка синтаксиса в инструкции TRANSFORM»(см. фото3)



0



Модератор

Эксперт MS Access

5613 / 2726 / 672

Регистрация: 12.06.2016

Сообщений: 7,293

21.03.2020, 00:11

5

Цитата
Сообщение от Hells Korzhik
Посмотреть сообщение

Предложенный вариант не работает

Вижу расхождение — в предложенном варианте PIVOT Format([Дата_рождения],»mmm»)

А у Вас как? Смотрите внимательнее.



0



Hells Korzhik

0 / 0 / 0

Регистрация: 24.05.2018

Сообщений: 11

21.03.2020, 00:32

 [ТС]

6

Сильно доработал — и получился вот такой вариант.
(Извините за путаницу в коде-у меня продолжается процесс)
Осталось доработать счетчик для месяцев

SQL
1
2
3
4
5
6
TRANSFORM COUNT(Сотрудники.дата_рождения) AS [Sum-Количество]
SELECT отдел, COUNT(Сотрудники.дата_рождения) AS ГОД
FROM Сотрудники
WHERE (((((MONTH([Сотрудники]![Дата_рождения])) ))))
GROUP BY отдел
PIVOT Format([Дата_рождения],"mm") IN ("янв","фев","мар","апр","май","июн","июл","авг","сен","окт","ноя","дек");

Миниатюры

Перекрестный запрос Microsoft Access
 



0



Hells Korzhik

0 / 0 / 0

Регистрация: 24.05.2018

Сообщений: 11

21.03.2020, 01:32

 [ТС]

7

Все получилось-спасибо за участие!

SQL
1
2
3
4
5
6
TRANSFORM COUNT (Format([Дата_рождения],"mmmm")) 
SELECT отдел, COUNT(*) AS ГОД
FROM Сотрудники
WHERE (((((MONTH([Сотрудники]![Дата_рождения])) ))))
GROUP BY  отдел 
PIVOT Format([Дата_рождения],"mmmm")  ;

Миниатюры

Перекрестный запрос Microsoft Access
 



0



Logo
MurCode

  • Форумы
  • Поиск
  • О проекте

Ошибка синтаксиса — не могу найти

Gugy

Дата: 03.02.2012 13:33:31

studieren
Gugy,

Вы скорее всего не подключили библиотеку DAO.

действительно:( Уже подключила… Спасибо!

Теперь выдает ошибку как и ранее «Ошибка синтаксиса в инструкции Transform»

mds_world

Дата: 03.02.2012 13:40:32

Gugy
[Теперь выдает ошибку как и ранее «Ошибка синтаксиса в инструкции Transform»

Владимир Саныч
Распечатайте значение strSQL.

Озверин

Дата: 03.02.2012 13:41:23

Gugy
Добрый день! Перечитала многие темы, но ответ на свой вопрос не нашла.
Мне нужно выполнить запрос SQL из VBA. Сам запрос отлично работает. Но вот из кода запустить не могу, так как выдает ошибку «Ошибка синтаксиса в инструкции TRANSFORM». Пробовала разные варианты, где может быть ошибка, но так и не нашла:(
Вот мой код:

Private Sub Kaz_Click()

Dim q As String
Dim strSQL As String
q = "720293*"

strSQL = "TRANSFORM Sum(Данные.Колво) AS [Sum-Колво] " & _
" SELECT Данные.Ex_im, Данные.Страна " & _
"FROM Данные " & _
"WHERE ((
(Данные.Коды) Like " & Chr$(34) & q & Chr$(34) & ") 
AND ((Year([Дата]))=2010 Or (Year([Дата]))=2011))" & _
"GROUP BY Данные.Ex_im, Данные.Страна " & _
"PIVOT Данные.Дата;"

DoCmd.RunSQL strSQL

End Sub

q — это одно из условий отбора, которое я планирую менять. Убирала с кода данное условия, но ошибку выдает ту же. Т.е. думаю, что проблема не в этом.
Помогите, пожалуйста, разобраться!

скобок в where на 1 закрывающую больше вроде или на открывающую меньше.
судя по коду я бы поставил перед (Данные.Коды) еще 1 (

studieren

Дата: 03.02.2012 13:41:44

Gugy,

А теперь проверьте текст SQL. Т.е. сразу же после программного формирования SQL текста добавьте строчку:

Debug.Print strSQL

А затем в окне отладки посмотрите текст повнимательнее. Если сами ошибку не обнаружите, то покажите здесь на форуме.

Озверин

Дата: 03.02.2012 13:45:06

Озверин,

((Данные.Коды) Like » & Chr$(34) & q & Chr$(34) & «)
AND ((Year([Дата])=2010 Or Year([Дата])=2011))

както так думаю )

mds_world

Дата: 03.02.2012 13:52:32

Озверин
скобок в where на 1 закрывающую больше вроде или на открывающую меньше.
судя по коду я бы поставил перед (Данные.Коды) еще 1 (

Лишние скобки, которые акс рассыпает в невероятном количестве, в большинстве своем нафик не нужны

"Where (Данные.Коды Like '" & q & "') AND Year([Дата]) in (2010, 2011)  "

Gugy

Дата: 03.02.2012 13:53:23

Со скобками все в порядке.
Спасибо всем за помощь! Запрос заработал!! Ура!!!
Правда как-то криво, но я постараюсь с этим разобраться.

nord-woolf

Дата: 03.02.2012 13:55:50

mds_world
"... Year([Дата]) in (2010, 2011)  "

Охо-хо…
:)

Озверин

Дата: 03.02.2012 14:03:54

nord-woolf
mds_world
"... Year([Дата]) in (2010, 2011)  "

Охо-хо…
:)

?

Gugy

Дата: 03.02.2012 14:05:02

mds_world
Лишние скобки, которые акс рассыпает в невероятном количестве, в большинстве своем нафик не нужны

"Where (Данные.Коды Like '" & q & "') AND Year([Дата]) in (2010, 2011)  "

О, спасибо! Убрала лишнее:)

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's user avatar

Erik A

31.8k13 gold badges42 silver badges67 bronze badges

asked May 21, 2018 at 8:11

Mojtaba's user avatar

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

Sam's user avatar

SamSam

5,5691 gold badge18 silver badges33 bronze badges

2

Is it possible to use the HAVING clause with the transform statement in MS Access 2010?
I keep getting “Syntax error in transform statement”

My sql is

TRANSFORM FIRST(appointment_date) As FirstOfappointment_date
SELECT rank, complete_name
FROM appointment_overview
WHERE status IS NULL OR status <> ‘Deleted’
GROUP BY rank, complete_name
HAVING COUNT(appointment_id) < 2
PIVOT type;

I tried testing the select statement by itself and it works fine

Is what I’m trying to do not supported by access?

Erik A's user avatar

Erik A

31.8k13 gold badges42 silver badges67 bronze badges

asked Dec 1, 2017 at 3:34

Shawn Koh's user avatar

0

Indeed, Having is not available when executing a Pivot.

A possible workaround is to use a subquery, and move your Having clause to the Where clause:

TRANSFORM FIRST(appointment_date) As FirstOfappointment_date
SELECT rank, complete_name
FROM appointment_overview a
WHERE (status IS NULL OR status <> 'Deleted')
AND (SELECT Count(s.appointment_id) FROM appointment_overview s WHERE (status IS NULL OR status <> 'Deleted') AND s.rank = a.rank AND s.complete_name = a.complete_name) = 2
GROUP BY rank, complete_name
PIVOT type;

Note that this may have a substantial impact on performance.

answered Dec 1, 2017 at 7:37

Erik A's user avatar

Erik AErik A

31.8k13 gold badges42 silver badges67 bronze badges

1

Я понял, что ответ глуп, все в порядке, и, конечно же, это работает, но нужно кое-что исправить, где есть запятая, должна стоять & «» «» & и так как она возникает после того, как строка продолжит с & _ before который должен стоять так, как pollID «так, выглядит так»

"TRANSFORM Str(Count([Prijava].[id]))&"" ""& Str(Count([Prijava].[datumSmrti])) " & _
"SELECT MKB10.id &"" ""& IIf([pol].[id]=1,'M','Ž') &"" ""& MKB10.NazivLatinski " & _
"FROM Pol INNER JOIN ((Opstina INNER JOIN Pacijent ON Opstina.id = Pacijent.opstinaID) INNER JOIN (MKB10 INNER JOIN Prijava ON MKB10.id = Prijava.mkb10ID) ON Pacijent.id = Prijava.pacijentID) ON Pol.id = Pacijent.polID " & _
"GROUP BY MKB10.id, IIf([pol].[id]=1,'M','Ž'), MKB10.NazivLatinski " & _
"ORDER BY MKB10.id " & _
"PIVOT starosnoDoba2([starost]) In ('<1','1','2','3','4','5','6','7-9','10-14','15-19','20-29','30-39','40-49','50-59','60-69','70>') "

Понравилась статья? Поделить с друзьями:

Это тоже интересно:

  • Очки вижн с дырочками инструкция по применению
  • Очки в сеточку для восстановления зрения инструкция
  • Очки в мелкую дырочку для чего инструкция
  • Очки vr box для телефона инструкция по применению
  • Очки 3д для телевизора самсунг инструкция по применению

  • Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии