我目前正在工作的查詢返回所需的結果,但問題是我必須爲每個要添加的額外列創建一個具有不同TaskCounters的額外連接(這當然不是理性決策)。SQL Server加入
該查詢應該在SQLServer以及Access DB上運行,因此我不需要任何特殊功能(如Pivot,CTE等),這些功能在訪問中不受支持。我需要修改該查詢,以便儘可能減少聯接的數量。
tblConsultations是根據訪問類型(即,如果我們有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