Я использую Crystal Reports, который позволяет создавать вещи, называемые выражениями SQL. В основном это подзапросы, но они ограничены, поэтому каждое выражение SQL может возвращать только скалярное значение. Для получения дополнительной информации, здесь: http://www.cogniza.com/wordpress/2005/11/07/crystal-reports-using-sql-expression-fields/
В упомянутой статье очень конкретно сказано, что:
If you are using a SQL Expression as a subquery and wish to link it to the
detail row of your main report, do not include the table you wish to link to
in the FROM clause of the subquery. For example:
(
SELECT MAX("FLOWSHEET"."VALUE")
FROM FLOWSHEET
WHERE "FLOWSHEET"."ID" in ('11')
AND "FLOWSHEET"."IP_ID" = "HOSPITAL_VISIT"."IP_ID"
)
The above query links to the HOSPITAL_VISIT table in the main report by
linking to the IP_ID field. To accomplish this, HOSPITAL_VISIT is omitted
from the FROM clause in the query.
У меня есть основной запрос в моем отчете, который говорит:
SELECT
HIFIS_HousePlacements.MovedInDate,
vw_ClientBasics.LastName,
vw_ClientBasics.FirstName,
HIFIS_Clients_HousePlacements.ClientID
FROM
HIFIS_Clients_HousePlacements
INNER JOIN HIFIS_HousePlacements ON HIFIS_Clients_HousePlacements.HousePlacementID=HIFIS_HousePlacements.HousePlacementID
INNER JOIN vw_ClientBasics ON HIFIS_Clients_HousePlacements.ClientID=vw_ClientBasics.ClientID
Теперь я хочу добавить выражение SQL
(
SELECT TOP 1 AssessmentAcuityType
FROM vw_IntakeAssessmentAcuityScores
WHERE vw_IntakeAssessmentAcuityScores.ClientID=HIFIS_Clients_HousePlacements.ClientID
AND vw_IntakeAssessmentAcuityScores.AssessmentTool = 'SPDAT'
AND vw_IntakeAssessmentAcuityScores.AssessmentToolType NOT LIKE '%VI%'
AND vw_IntakeAssessmentAcuityScores.IntakeDate BETWEEN DATEADD(month,-6,HIFIS_HousePlacements.MovedInDate) AND HIFIS_HousePlacements.MovedInDate
ORDER BY IntakeID DESC
)
Когда я это делаю, я получаю ошибку The multi-part identifier HIFIS_HousePlacements.MovedInDate cannot be bound
Итак, хотя я знаю, что не определил HIFIS_HousePlacements в своем подзапросе, правила полей выражений SQL утверждают, что я не должен этого делать. Кто-нибудь может помочь мне понять, как исправить эту ошибку?