Недопустимая инструкция sql в инструкции не обнаружены столбцы

Строка подключения с PowerPivot к Excel

DJ_Marker_MC

Дата: Среда, 01.04.2015, 10:41 |
Сообщение № 1

Группа: Друзья

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

Замечаний:
0% ±


Excel 2019

Доброе утро коллеги, второй день пытаюсь подключиться к Excel через Union All Select в PowerPivot (уже аж бесит от того что не удается).
Прошу помощи кто знает как это организовать.
По теме вопроса, есть 3 файл — Акцесс, Excel и еще один Excel с PowerPivot. В третьем файле втягиваю в PP первые два: изначально штатными средствами подключившись к таблице Access. Мне нужно втянутую таблицу с акцесс через Union All Select дополнить данными с ексель.

Запрос делаю такой:

Но зараза мне выдает ошибку:
Ядру СУБД Microsoft Access не удается найти входную таблицу или запрос «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:DesktopПримерСотрудникиExcel.xlsx;Persist Security Info=False;Extended Properties=»Excel 12.0;HDR=Yes»». Убедитесь, что объект существует, а его имя указано правильно.

Вопрос лишь в строке подключения к ексель, а вот что не так, не пойму.

Все 3 файла прилаживаю.

Заранее благодарю.

К сообщению приложен файл:

PP__.rar
(66.5 Kb)

 

Ответить

DJ_Marker_MC

Дата: Среда, 01.04.2015, 10:42 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

Замечаний:
0% ±


Excel 2019

и еще один архив с одним файлом, так как в посте выше только файл акцесс и PowerPivot

К сообщению приложен файл:

8671792.rar
(93.0 Kb)

 

Ответить

Pelena

Дата: Среда, 01.04.2015, 11:37 |
Сообщение № 3

Группа: Админы

Ранг: Местный житель

Сообщений: 18951


Репутация:

4325

±

Замечаний:
±


Excel 365 & Mac Excel

По идее после FROM должно идти имя листа и диапазон, из которого считываются данные, а потом уже «Provider=…»
Что-то типа
«…FROM [Сотрудники$A2:D6]» , «Provider=…»


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

DJ_Marker_MC

Дата: Среда, 01.04.2015, 11:44 |
Сообщение № 4

Группа: Друзья

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

Замечаний:
0% ±


Excel 2019

Лена, я уже по всякому перепробовал… и перерыл кучу сайтов, нигде ничего такого не пишут толком.
Я в одной из своих старых тем делал связку access + txt, там строка подключения такая:
FROM [Text;DataBase=\Serversql1cBudPost_SQLRepErtАналитикОтгрузка].[Otgruzka.txt]

Но в тоже время рядом с txt лежит файлик schema.ini который описывает столбцы и разделители.
А вот с ексель никак не выходит. Насчет диапазона, вряд ли… тут нужно указать только таблицу с файла ексель и перечень столбцов…

 

Ответить

Pelena

Дата: Среда, 01.04.2015, 11:49 |
Сообщение № 5

Группа: Админы

Ранг: Местный житель

Сообщений: 18951


Репутация:

4325

±

Замечаний:
±


Excel 365 & Mac Excel

нужно указать только таблицу

Правильно, а где ты указываешь таблицу?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

DJ_Marker_MC

Дата: Среда, 01.04.2015, 12:02 |
Сообщение № 6

Группа: Друзья

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

Замечаний:
0% ±


Excel 2019

Я уже и так перепробовал. Варианты попыток)))

1-й

2-й

3-й

Если я правильно понимаю, то ближе всего к истине 1-й, но не то.
При таков вводе говорит: Недопустимая инструкция SQL. В инструкции не обнаружены столбцы.

 

Ответить

Pelena

Дата: Среда, 01.04.2015, 12:10 |
Сообщение № 7

Группа: Админы

Ранг: Местный житель

Сообщений: 18951


Репутация:

4325

±

Замечаний:
±


Excel 365 & Mac Excel

Жень, синтаксис SQL требует следующего:
SELECT список полей FROM таблица а уже потом «Provider= и прочее
Причём таблица должна быть таблицей, то есть диапазоном
Щас попробую на твоём файле


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Pelena

Дата: Среда, 01.04.2015, 12:42 |
Сообщение № 8

Группа: Админы

Ранг: Местный житель

Сообщений: 18951


Репутация:

4325

±

Замечаний:
±


Excel 365 & Mac Excel

Вот, запусти макрос Import. Данные считываются через SQL запрос из файла СотрудникиExcel, который должен лежать в той же папке


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

DJ_Marker_MC

Дата: Среда, 01.04.2015, 13:00 |
Сообщение № 9

Группа: Друзья

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

Замечаний:
0% ±


Excel 2019

Ну, макрос работает на ура… а вот вопрос с запросом и строкой подключения остался все равно не решенным.
Попробовал указать таблицу с диапазоном как в макросе — [Сотрудники$A1:D6]
Все равно ругается… где то явно есть подвох…

 

Ответить

krosav4ig

Дата: Среда, 01.04.2015, 14:52 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

DJ_Marker_MC, пробуйте так
строка подключения[vba]

Код

DSN=MS Access Database;DBQ=СотрудникиAccess.accdb_;DefaultDir=D:DesktopПример;DriverId=25;FIL=MS Access

[/vba]
текст команды
[vba]

Код

SELECT * FROM
Сотрудники
union all
(SELECT * from
[Сотрудники$] in » [Excel 12.0 xml;Database=D:DesktopПримерСотрудникиExcel.xlsx])

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4igСреда, 01.04.2015, 15:03

 

Ответить

I am merging data from one file that contains six different sheets or tabs. All sheets contain the same headers. For the task I am using PowerPivot.

1st I created a connection using Excel and selected the file/imported Sheet1
2nd I activated my PowerPivot > Design > Existing Connections
3rd Table properties Table Name [Sheet1] > Switch to [Query Editor]

Here’s my SQL that resulted the error in the title:

  Select [Sheet1$].* From [Sheet1$]
  UNION ALL
  Select [Sheet2$].* FROM `C:_TESTHG.xlsx`.[Shee2$]
  UNION ALL
  Select [Sheet3$].* FROM `C:_TESTHG.xlsx`.[Shee3$]
  UNION ALL
  Select [Sheet4$].* FROM `C:_TESTHG.xlsx`.[Shee4$]
  UNION ALL
  Select [Sheet5$].* FROM `C:_TESTHG.xlsx`.[Shee5$]
  UNION ALL
  Select [Sheet6$].* FROM `C:_TESTHG.xlsx`.[Shee6$]

When I validated the statement had the error:

The SQL statement is not valid. There are no columns detected in the statement.

pnuts's user avatar

pnuts

58.2k11 gold badges87 silver badges139 bronze badges

asked Oct 17, 2015 at 5:43

hexagonwrench's user avatar

0

To answer and share how I resolved my question I found that when I created the connection I can still select sheets 2 to 6 in the dropdown from existing connections. So I tried this code ………and resolved the error :).

 Select [Sheet1$].* From [Sheet1$]
  UNION ALL
  Select [Sheet2$].* FROM [Shee2$]
  UNION ALL
  Select [Sheet3$].* FROM [Shee3$]
  UNION ALL
  Select [Sheet4$].* FROM [Shee4$]
  UNION ALL
  Select [Sheet5$].* FROM [Shee5$]
  UNION ALL
  Select [Sheet6$].* FROM [Shee6$]

answered Oct 17, 2015 at 5:44

hexagonwrench's user avatar

Я объединяю данные из одного файла, содержащего шесть разных листов или вкладок. Все листы содержат одинаковые заголовки. Для задачи я использую PowerPivot.

Сначала я создал подключение с помощью Excel и выбрал файл/импортированный Лист1
2. Я активировал PowerPivot > Дизайн > Существующие подключения
Свойства 3-й таблицы Имя таблицы [Лист1] > Переключиться на [Редактор запросов]

Вот мой SQL, который привел к ошибке в заголовке:

  Select [Sheet1$].* From [Sheet1$]
  UNION ALL
  Select [Sheet2$].* FROM `C:_TESTHG.xlsx`.[Shee2$]
  UNION ALL
  Select [Sheet3$].* FROM `C:_TESTHG.xlsx`.[Shee3$]
  UNION ALL
  Select [Sheet4$].* FROM `C:_TESTHG.xlsx`.[Shee4$]
  UNION ALL
  Select [Sheet5$].* FROM `C:_TESTHG.xlsx`.[Shee5$]
  UNION ALL
  Select [Sheet6$].* FROM `C:_TESTHG.xlsx`.[Shee6$]

Когда я подтвердил утверждение, была ошибка:

Оператор SQL недействителен. В операторе не обнаружены столбцы.

1 ответ

Чтобы ответить и поделиться тем, как я решил свой вопрос, я обнаружил, что при создании соединения я все еще могу выбирать листы со 2 по 6 в раскрывающемся списке из существующих соединений. Итак, я попробовал этот код …….. и устранил ошибку :).

 Select [Sheet1$].* From [Sheet1$]
  UNION ALL
  Select [Sheet2$].* FROM [Shee2$]
  UNION ALL
  Select [Sheet3$].* FROM [Shee3$]
  UNION ALL
  Select [Sheet4$].* FROM [Shee4$]
  UNION ALL
  Select [Sheet5$].* FROM [Shee5$]
  UNION ALL
  Select [Sheet6$].* FROM [Shee6$]


0

hexagonwrench
17 Окт 2015 в 08:44

Как исправить ошибку «Столбец недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY» - Направляющие

Как исправить ошибку «Столбец недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY» — Направляющие

Ошибка «Столбец недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.», Упомянутый ниже, возникает, когда вы выполняете«ГРУППА ПО», И вы включили как минимум один столбец в список выбора, который не является частью предложения group by и не содержится в агрегатной функции, например макс (), мин (), сумма (), счет () и avg (). Итак, чтобы запрос работал, нам нужно добавить все неагрегированные столбцы в любое предложение group by, если это возможно и не влияет на результаты, или включить эти столбцы в подходящую агрегатную функцию, и это будет работать как шарм. Ошибка возникает в MS SQL, но не в MySQL.

Два ключевых слова «Группа по» и «агрегатная функция»Были использованы в этой ошибке. Поэтому мы должны понимать, когда и как их использовать.

Группировать по пункту:

Когда аналитику необходимо суммировать или агрегировать данные, такие как прибыль, убыток, продажи, затраты, зарплата и т. Д., С помощью SQL, «ГРУППА ПО»Очень помогает в этом отношении. Например, чтобы подвести итог, ежедневные продажи, чтобы показать высшему руководству. Точно так же, если вы хотите подсчитать количество студентов на факультете в университетской группе, а агрегированная функция поможет вам в этом.

Группировать по стратегии разделения-применения-объединения:

Группа по использует стратегию «разделить-применить-объединить»

  • Разделенная фаза делит группы по их значениям.
  • На этапе применения применяется агрегатная функция и генерируется одно значение.
  • Комбинированный этап объединяет все значения в группе как одно значение.

На рисунке выше мы видим, что столбец был разделен на три группы на основе первого столбца C1, а затем к сгруппированным значениям применяется агрегатная функция. Наконец, фаза комбинирования присваивает каждой группе одно значение.

Это можно пояснить на примере ниже. Сначала создайте базу данных с именем «appuals».

Пример:

Создать таблицу «наемный рабочий», Используя следующий код.

ИСПОЛЬЗУЙТЕ [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo]. [Employee] ([e_id] [int] NOT NULL, [e_ename] [varchar] (50) NULL, [dep_id] [int] NULL, [salary] [int] NULL, CONSTRAINT [PK_employee] PRIMARY KEY CLUSTERED ([e_id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLKSOW_ROW_LOCKS = ON_LOCKS = ON, ALLKSOW_ROW_LOCKS = ON, ALL PRIMARY]) ON [PRIMARY] GO SET ANSI_PADDING OFF GO

Теперь вставьте данные в таблицу, используя следующий код.

Вставить в значения сотрудников (e_id, e_ename, dep_id, salary) (101, ‘Sadia’, 1,6000), (102, ‘Saba’, 1,5000), (103, ‘Sana’, 2,4000), ( 104, «Хаммад», 2,3000), (105, «Умер», 3,4000), (106, «Канвал», 3,2000)

Результат будет таким.

Теперь выберите данные из таблицы, выполнив следующую инструкцию.

выберите * от сотрудника

Результат будет таким.

Теперь сгруппируйте по таблице по идентификатору отдела.

выберите dep_id, зарплату из группы сотрудников по dep_id

Ошибка: столбец employee.sallary недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

Вышеупомянутая ошибка возникает из-за того, что выполняется запрос «GROUP BY» и вы включили столбец «employee.salary» в список выбора, который не является ни частью предложения group by, ни включенным в агрегатную функцию.

Решение:

Как мы знаем, «группа по» возвращает одну строку, поэтому нам нужно применить агрегатную функцию к столбцам, не используемым в предложении group by, чтобы избежать этой ошибки. Наконец, примените группировку по и агрегатную функцию, чтобы найти среднюю зарплату сотрудника в каждом отделе, выполнив следующий код.

выберите dep_id, avg (salary) как average_sallary из группы сотрудников по dep_id

Более того, если изобразить эту таблицу в соответствии со структурой split_apply_combine, она будет выглядеть так.

На приведенном выше рисунке показано, что в первую очередь таблица сгруппирована в три группы в соответствии с идентификатором отдела, затем применяется функция агрегирования avg () для нахождения совокупного среднего значения зарплаты, которое затем объединяется с идентификатором отдела. Таким образом, таблица сгруппирована по идентификатору отдела, а заработная плата агрегирована по отделам.

Агрегатные функции:

  • Сумма (): Возвращает общую сумму каждой группы или суммы
  • Счетчик (): Не возвращает ни одной строки в каждой группе.
  • Среднее (): Возвращает среднее или среднее значение для каждой группы
  • Мин (): Возвращает минимальное значение каждой группы
  • Максимум(): Возвращает максимальное значение каждой группы.

Логическое описание совместного использования функций группировки и агрегирования:

Теперь мы разберемся с использованием «группировать по» и «агрегатных функций» логически на примере.

Создайте таблицу с именем «люди»В базе данных, используя следующий код.

ИСПОЛЬЗУЙТЕ [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo]. [People] ([id] [bigint] IDENTITY (1,1) NOT NULL, [name] [varchar] (500) NULL, [ city] [varchar] (500) NULL, [состояние] [varchar] (500) NULL, [age] [int] NULL) ON [PRIMARY] GO

Теперь вставьте данные в таблицу, используя следующий запрос.

вставить в значения людей (имя, город, штат, возраст) (‘Meggs’, ‘MONTEREY’, ‘CA’, 20), (‘Staton’, ‘HAYWARD’, ‘CA’, 22), (‘Irons’, IRVINE, CA, 25) (Krank, PLEASANT, IA, 23), (Davidson, WEST BURLINGTON, IA, 40), (Pepewachtel, FAIRFIELD ‘,’ IA ‘, 35) (‘ Schmid ‘,’ HILLSBORO ‘,’ OR ‘, 23), (‘ Davidson ‘,’ CLACKAMAS ‘,’ OR ‘, 40), (‘ Condy ‘,’ GRESHAM ‘,’ ИЛИ ‘, 35)

Результат будет таким:

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

выберите возраст, посчитайте ( *) как no_of_residents из группы людей по штатам

Ошибка: Столбец «people.age» недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

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

«Сообщение 8120, уровень 16, состояние 1, строка 16 Столбец« people.age »недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY».

Эта ошибка возникает из-за того, что «ГРУППА ПО» запрос выполнен и вы включили «‘люди. возраст» столбец в списке выбора, который не является частью предложения group by и не включен в агрегатную функцию.

При группировке по состоянию возникает ошибка

Логическое описание и решение:

Это не синтаксическая ошибка, это логическая ошибка. Поскольку мы видим, что столбец «no_of_residents» возвращает только одну строку, как теперь мы можем вернуть возраст всех жителей в одном столбце? У нас может быть список возраста людей, разделенный запятыми, или средний возраст, минимальный или максимальный возраст. Таким образом, нам нужно больше информации о столбце «возраст». Мы должны дать количественную оценку тому, что мы подразумеваем под столбцом возраста. По возрасту то, что мы хотим вернуть. Теперь мы можем изменить наш вопрос, добавив более конкретную информацию о столбце возраста, как это.

Найдите не жителей, а также средний возраст жителей в каждом штате. Учитывая это, мы должны изменить наш запрос, как показано ниже.

выберите штат, avg (age) как Age, подсчитайте ( *) как no_of_residents из группы людей по штатам

Это будет выполнено без ошибок, и результат будет таким.

Так что также важно логически подумать о том, что возвращать в операторе select.

Кроме того, следует учитывать следующие моменты, когда использование «группировать по», чтобы избежать ошибок.

  • Предложение GROUP BY идет после предложения where и перед предложением order by.
  • Мы можем использовать предложение where для исключения строк перед применением предложения «group by».
  • Если группирующий столбец содержит пустую строку, эта строка представляет собой отдельную группу. Более того, если столбец содержит более одного нуля, они помещаются в одну нулевую группу, как показано в следующем примере.

Группировать по и значениям NULL:

Сначала добавьте в таблицу еще одну строку с именем «люди» с пустым / нулевым столбцом «состояние».

вставить в значения людей (имя, город, штат, возраст) (’Kanwal’, ’GRESHAM’, ’’, 35)

Теперь выполните следующую инструкцию.

выберите штат, avg (age) как Age, подсчитайте ( *) как no_of_residents из группы людей по штатам

На следующем рисунке показан результат. Вы можете видеть, что пустое значение в столбце состояния рассматривается как отдельная группа.

Теперь увеличьте количество пустых строк, вставив больше строк в таблицу с нулевым состоянием.

вставить в значения людей (имя, город, штат, возраст) (’Kanwal’, ’IRVINE’, ’NULL’, 35), (’Krank’, ’PLEASANT’, ’NULL’, 23)

Теперь снова выполните тот же запрос для выбора вывода. Результат будет таким.

На этом рисунке видно, что пустой столбец рассматривается как отдельная группа, а пустой столбец с двумя строками рассматривается как другая отдельная группа с двумя номерами жителей. Вот как работает «group by».

я попал в тупик. У меня есть запрос, который генерируется какой-нибудь C# код. Запрос отлично работает в Microsoft SQL Server Management Studio при запуске с той же базой данных.

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

столбец, о котором идет речь, был недавно добавлен в базу данных. Это столбец даты под названием Incident_Begin_Time_ts .

An например, не является:

select * from PerfDiag 
where Incident_Begin_Time_ts > '2010-01-01 00:00:00';

другие запросы, такие как Select MAX(Incident_Being_Time_ts); сбой при запуске в код, потому что он думает, что столбец отсутствует.

какие идеи?

7 ответов


Я подозреваю, что у вас есть две таблицы с одинаковыми именами. Один принадлежит схеме «dbo» (dbo.PerfDiag), а другой принадлежит схеме по умолчанию учетной записи, используемой для подключения к SQL Server (что-то вроде userid.PerfDiag).

Если у вас есть неквалифицированная ссылка на объект схемы (например, таблица) — не квалифицированная по имени схемы — ссылка на объект должна быть разрешена. Разрешение имен происходит путем поиска объекта соответствующего типа в следующей последовательности (таблица) с указанным именем. Имя разрешается до первого совпадения:

  • по схеме пользователя по умолчанию.
  • по схеме «dbo».

неквалифицированная ссылка привязана к первому матчу в приведенной выше последовательности.

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

  • неквалифицированная ссылка может аннулировать кэшированный план выполнения хранимой процедуры или запроса, поскольку схема, к которой привязана ссылка, может изменяться в зависимости от учетных данных, выполняющих хранимую процедуру или запрос. Это приводит к перекомпиляции запроса / хранимой процедуры, повышению производительности. Перекомпиляции вызывают блокировку компиляции, которая блокирует доступ других пользователей к необходимым ресурсам.

  • разрешение имен замедляет выполнение запроса, поскольку необходимо выполнить два зондирования разрешите вероятную версию объекта (который принадлежит «dbo»). Это обычный случай. Единственный раз, когда один зонд разрешит имя, если текущий пользователь владеет объектом с указанным именем и типом.

[отредактировано для дальнейшего Примечание]

другие возможности (в определенном порядке):

  • вы не подключены к базе данных вы думаете, что вы.
  • вы не подключены к экземпляру SQL Server, который вы думаете ты.

дважды проверьте строки подключения и убедитесь, что они явно указывают имя экземпляра SQL Server и имя базы данных.



Если вы запускаете это внутри транзакции и оператора SQL, прежде чем это отбрасывает/изменяет таблицу, вы также можете получить это сообщение.


Если вы используете переменные с тем же именем, что и ваш столбец, возможно, вы забыли маркер переменной»@». В инструкции INSERT он будет обнаружен как столбец.


просто была такая же проблема. Я переименовал некоторые псевдонимные столбцы во временную таблицу, которая далее используется другой частью того же кода. По какой-то причине это не было захвачено SQL Server Management Studio, и он жаловался на недопустимые имена столбцов.

то, что я просто сделал, это создать новый запрос, скопировать код SQL из старого запроса в этот новый запрос и запустить его снова. Это, казалось, обновило окружающую среду правильно.


в конце концов я закрыл и перезапустил Microsoft SQL Server Management Studio; и это исправило его для меня. Но в других случаях достаточно было просто запустить новое окно запроса.


в моем случае я пытался получить значение из неправильного набора результатов при запросе нескольких операторов SQL.


Понравилась статья? Поделить с друзьями:
  • Недокромил натрия инструкция по применению
  • Недокромил инструкция по применению цена
  • Недельная розетка таймер тм22 инструкция по применению
  • Недельная розетка таймер feron tm22 инструкция по применению
  • Негрустин таблетки инструкция по применению цена