Я хотел бы получить dtmPost в основном запросе.Я попытался a.dtmPost после ai.strID, но это не сработало.Я не уверен, возможно ли это сделать без больших изменений.Правильно ли мое предположение?
SELECT p.strMed,
d.lngAKey,
ai.strID
FROM tblP p RIGHT JOIN tblV v
ON p.lngPKey = v.lngPKey INNER JOIN tblD d
ON v.lngVKey = d.lngVKey INNER JOIN tblAI ai
ON d.lngAKey = ai.lngAKey
WHERE dtmEff between
(SELECT MAX(a.dtmPost) AS dtmPost
FROM (SELECT dtmPost
FROM tblPBIH pbih
WHERE pbih.lngAKey = d.lngAKey
UNION
SELECT dtmPost
FROM tblPBI pbi
WHERE pbi.lngAKey = d.lngAKey
) a)
AND (SELECT MAX(a.dtmPost) AS dtmPost
FROM (SELECT DATEADD(D, 10, pbih.dtmPost) AS dtmPost
FROM tblPBIH pbih
WHERE pbih.lngAKey = d.lngAKey
UNION
SELECT DATEADD(D, 10, pbi.dtmPost) AS dtmPost
FROM tblPBI pbi
WHERE pbi.lngAKey = d.lngAKey
) a)
Я придумал следующее, и оно работает, но есть ли другой способ, который лучше?
DECLARE @X date, @Y date
SET @X =(SELECT MAX(a.dtmPost) AS dtmPost
FROM (SELECT dtmPost
FROM tblPBIH pbih
WHERE pbih.lngAKey = d.lngAKey
UNION
SELECT dtmPost
FROM tblPBI pbi
WHERE pbi.lngAKey = d.lngAKey
) a)
SET @Y =(SELECT MAX(a.dtmPost) AS dtmPost
FROM (SELECT DATEADD(D, 10, pbih.dtmPost) AS dtmPost
FROM tblPBIH pbih
WHERE pbih.lngAKey = d.lngAKey
UNION
SELECT DATEADD(D, 10, pbi.dtmPost) AS dtmPost
FROM tblPBI pbi
WHERE pbi.lngAKey = d.lngAKey
) a)
SELECT p.strMed,
d.lngAKey,
ai.strID,
@X AS dtmBackDate
FROM tblP p RIGHT JOIN tblV v
ON p.lngPKey = v.lngPKey INNER JOIN tblD d
ON v.lngVKey = d.lngVKey INNER JOIN tblAI ai
ON d.lngAKey = ai.lngAKey
WHERE dtmEff > @X
AND dtmEff <= @Y
Спасибо за вашу помощь.