Задать вопрос

Как объеденить результаты двух sql запросов?

Есть две базы данных, нужно выполнить запрос1 к БД1, затем полученные данные подставить в запрос2 к БД2 и результат запроса вывести в сводную таблицу. Нужно это все реализовать средствами VBA в Excel. Заполнять данными сводную таблицу я научился, а вот с остальным нужна помощь.
  • Вопрос задан
  • 1709 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Steein
@Steein
Программист
Вы можете использовать UNION

Это будет возвращать результаты запросов в отдельных строках.
Сначала вы должны убедиться, что оба запроса возвращают одинаковые столбцы.
Затем вы можете сделать:

SELECT tableA.Id, tableA.Name, [tableB].Username AS Owner, [tableB].ImageUrl, [tableB].CompanyImageUrl, COUNT(tableD.UserId) AS Number
FROM tableD 
RIGHT OUTER JOIN [tableB] 
INNER JOIN tableA ON [tableB].Id = tableA.Owner ON tableD.tableAId = tableA.Id 
GROUP BY tableA.Name, [tableB].Username, [tableB].ImageUrl, [tableB].CompanyImageUrl

UNION

SELECT tableA.Id, tableA.Name,  '' AS Owner, '' AS ImageUrl, '' AS CompanyImageUrl, COUNT([tableC].Id) AS Number
FROM 
[tableC] 
RIGHT OUTER JOIN tableA ON [tableC].tableAId = tableA.Id GROUP BY tableA.Id, tableA.Name


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

ТАК

Вы можете использовать Join

Если есть какие-то данные, которые разделяют между двумя запросами. Это позволит поставить результаты обоих запросов в одну строку присоединились идентификатором, который, вероятно, больше, что вы хотите делать здесь ...

Вы можете сделать:

SELECT tableA.Id, tableA.Name, [tableB].Username AS Owner, [tableB].ImageUrl, [tableB].CompanyImageUrl, COUNT(tableD.UserId) AS NumberOfUsers, query2.NumberOfPlans
FROM tableD 
RIGHT OUTER JOIN [tableB] 
INNER JOIN tableA ON [tableB].Id = tableA.Owner ON tableD.tableAId = tableA.Id 


INNER JOIN 
  (SELECT tableA.Id, COUNT([tableC].Id) AS NumberOfPlans 
   FROM [tableC] 
   RIGHT OUTER JOIN tableA ON [tableC].tableAId = tableA.Id 
   GROUP BY tableA.Id, tableA.Name) AS query2 
ON query2.Id = tableA.Id

GROUP BY tableA.Name, [tableB].Username, [tableB].ImageUrl, [tableB].CompanyImageUrl
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы