Запрос, на котором я работаю в настоящий момент, возвращает желаемые результаты, но проблема в том, что мне нужно создать дополнительное соединение с различными TaskCounters для каждого дополнительного столбца, который я хочу добавить (что, конечно, не является рациональным решением).SQL Server Join
Запрос должен выполняться на SQLServer, а также в базе данных доступа, поэтому мне не нужны никакие специальные функции (например, Pivot, CTE и т. Д.), Которые не поддерживаются при доступе. Мне нужно пересмотреть этот запрос, чтобы количество соединений было уменьшено настолько, насколько это возможно.
tblКонсультации - это основная таблица, в которой запись для конкретного ребенка записывается в зависимости от типа посещения (т. Е. Если у нас есть 4 посещения, у нас есть 4 записи для консультаций). В столбце результата должны отображаться значения для этих 4 посещений и отображаться NULL, если нет значения против посещения.
Я хочу, чтобы устранить необходимость дополнительной присоединиться из той же таблицы, которые я должен добавить для каждого дополнительного столбца
Запрос выглядит следующим образом:
SELECT Cast(SUBSTRING(tc2.ChildCounter, 7, LEN(tc2.ChildCounter)) AS NUMERIC) AS pkChildID
,tc2.VisitType
,tblQuitOffered.Result AS KWA_QuitOffered
,tblQuitReferral.Result As KWA_QuitReferral
FROM tblConsultations tc2
INNER JOIN tblChild tc ON tc2.ChildCounter = tc.ChildCounter
LEFT JOIN tblDelivery td ON td.ChildCounter = tc.ChildCounter
LEFT JOIN (
SELECT ttr.ResultCounter
,ttr.ChildCounter
,tkt.VisitType
,ttr.Result
,ttr.TaskCounter
FROM tblTaskResults ttr
INNER JOIN tlkpKeyTasks tkt ON tkt.TaskCounter = ttr.TaskCounter
AND tkt.TaskCounter IN (
'001410'
,'001463'
,'001431'
)
) AS tblQuitOffered ON tc2.VisitType = tblQuitOffered.VisitType
AND tblQuitOffered.ChildCounter = tc2.ChildCounter
LEFT JOIN (
SELECT ttr.ChildCounter
,tkt.VisitType
,ttr.Result
FROM tblTaskResults ttr
INNER JOIN tlkpKeyTasks tkt ON tkt.TaskCounter = ttr.TaskCounter
AND tkt.TaskCounter IN (
'001411'
,'001464'
,'001432'
)
) AS tblQuitReferral ON tc2.VisitType = tblQuitReferral.VisitType
AND tblQuitReferral.ChildCounter = tc2.ChildCounter
WHERE tc2.VisitType in (1, 2, 3, 4)
AND tc2.ConsDate BETWEEN '20130127' and '20130228'
ORDER BY tc2.ChildCounter,tc2.VisitType
Результат выглядит следующим образом :
pkChildID VisitType KWA_QuitOffered KWA_QuitReferral
2224 1 No No
2224 3 NULL NULL
2224 4 NULL NULL
2225 1 No Yes
2225 2 Yes Yes
2225 3 Yes Yes
2225 4 NULL NULL
Я не думаю, что вы найдете один удовлетворительный ответ, который будет работать как с SQL Server, так и с MS Access. Как упоминалось в bluefeet, сам синтаксис SQL отличается. Возможно, вам понадобятся разные решения для каждой среды. – BellevueBob
@BellevueBob Я не согласен, похоже, что нужен AMS - это просто предложение GROUP BY. Но для меня загадка заключается в использовании TaskCounter при определении QuitOffered и QuitReferral. –
@BellevueBob - Кажется, я нашел ответ: D – Hogan