#sql #ms-access-2007
#sql #ms-access-2007
Вопрос:
Привет, у меня есть ситуация, когда мне нужно объединить две таблицы, но отфильтровать значение из третьей таблицы. Как показано ниже:
SELECT a.Key , (SELECT SUM(B.hours) FROM tableB as B
INNER JOIN tableC as C ON B.List=C.List
WHERE C.Status = 'Approved' AND B.Key LIKE A.key) ,
(SELECT SUM(B.hours) FROM tableB as B
INNER JOIN tableC as C ON B.List=C.List
WHERE C.Status = 'Pending' AND B.Key LIKE A.key)
FROM tableA as A GROUP BY A.key
есть ли другой способ сделать это без использования коррелированных подзапросов? я бы хотел использовать объединения, но я просто не знаю, как связать таблицу C с этой картинкой.
Заранее спасибо.
Ответ №1:
Подзапрос может быть не такой уж плохой идеей, но вы можете сделать это с помощью условной агрегации:
SELECT a.Key,
sum(iif(c.Status = "Approved", B.hours, 0)),
sum(iif(c.Status = "Pending", B.hours, 0))
FROM tableA as A left join
(tableB as b inner join
tableC as c
on b.list = c.list
)
on b.key like a.key
GROUP BY A.key;
MS Access имеет загадочный синтаксис для объединений, особенно для нескольких объединений. Я думаю, что вышесказанное верно.
Комментарии:
1. спасибо, Гордон, я не знал, что Access разрешает объединение дочерних таблиц с дочерними таблицами. т.е. я думал, что доступ разрешен только к таблице A, соединяющей таблицу B, и таблице, соединяющей таблицу C . Не так, как ваша таблица ответов A Присоединяется к таблице B, затем внутри (таблица B присоединяется к таблице C). Я собираюсь попробовать это прямо сейчас и вернуться к вам.
2. @Tyrion . , , Access разрешает это. Я просто никогда не уверен, правильно ли я понимаю синтаксис Access. Я стараюсь избегать доступа, предпочитая вместо этого бесплатные версии других баз данных.
3. ну, скобки доставили мне головную боль, тем более, что мне пришлось присоединяться к другим таблицам. но это сработало!. Большое вам спасибо.