Подзапрос с использованием Microsoft Query от Excel

#sql-server #excel

#sql-сервер #excel

Вопрос:

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

 SELECT COUNT(DISTINCT ALARMTABLE.ID) FROM
 (SELECT ALARMTABLE.ID FROM ALARMTABLE) AS AA
JOIN
 (SELECT ALARMDESCRIPTIONTABLE.DESCRIPTION FROM ALARMDESCRIPTIONTABLE) AS BB
ON AA.ID=BB.ID
  

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

 AlarmDescription     Alarm COUNT
-----------------------------------
Fire Alm                 1000
Flood Alm                12
Tornado Alm              75
  

Когда я запускаю это с помощью Microsoft query, все, что я получаю, это сообщение об ошибке can’t add table ‘(‘. Что я делаю не так?

Комментарии:

1. Производная таблица BB не имеет ID столбца, поэтому не может быть присоединена к таблице AA на AA.ID=BB.ID .

Ответ №1:

Ваш SQL содержит несколько синтаксических ошибок.

Мне интересно, может ли используемый вами SQL выглядеть более похоже на это:

 SELECT BB.DESCRIPTION, COUNT(*)
  FROM ALARMTABLE AS AA
       INNER JOIN ALARMDESCRIPTIONTABLE AS BB
          ON AA.ID = BB.ID
 GROUP 
    BY BB.DESCRIPTION;
  

Ответ №2:

Во-первых, если вы присваиваете таблице псевдоним, на нее должно быть указано псевдонимное имя. Итак, измените:

 SELECT COUNT(DISTINCT ALARMTABLE.ID) FROM
  

Для

 SELECT COUNT(DISTINCT AA.ID) FROM
  

Во-вторых, ошибка, которую вы получаете, вероятно, возникает, когда MS Query пытается визуализировать SQL. Вы можете обойти это, добавив тривиальный запрос и отредактировав его. Щелкните свойства, затем свойства соединения, затем вкладку Определение. Затем вы можете отредактировать запрос в текстовом поле Command.

Или, возможно, менее болезненно: вы могли бы сохранить запрос в представлении и использовать представление в MS Query.