В предыдущем вопросе Я спросил, как вернуть даты последних тестов, пройденных каждым пользователем, на основе трех таблиц: Users , Tests и Проходит .
|--------|---------|---------|---------|---------|---------|
|User |Test A |Test B |Test C |Test D |Test E |
|--------|---------|---------|---------|---------|---------|
|James |Null |6/3/11 |Null |Null |4/3/11 |
|Mark |Null |1/4/11 |8/5/11 |23/5/10 |Null |
|--------|---------|---------|---------|---------|---------|
Был посоветован следующий запрос:
select
u.username,
max(case when testid = 1 then datetaken else null end) as A,
max(case when testid = 2 then datetaken else null end) as B,
max(case when testid = 3 then datetaken else null end) as C,
max(case when testid = 4 then datetaken else null end) as D,
max(case when testid = 5 then datetaken else null end) as E
from users as u left join passes as p on u.userid = p.userid
group by u.userid
Оказывается, в моем реальном сценарии у меня есть две таблицы Tests (скажем, TestsX, содержащиетесты A, B и C и TestsY, содержащие тесты D и E) и две соответствующие таблицы проходов (скажем, PassesX и PassesY).
Это необходимо, поскольку таблицы имеют разные структуры.Однако, для простоты, скажем, они идентичны.Они оба ссылаются на одну и ту же таблицу пользователей.Не могли бы вы дать мне знать, как соответствующим образом настроить указанную выше команду выбора, чтобы получить тот же вывод (все в одной таблице)?
Может быть, это достижимо с помощью подзапроса и объединения, но я не знаю, как?
Большое спасибо (и я надеюсь, что это имеет смысл).