«Идентификатор из нескольких частей не может быть связан» в Crystal Reports с выражениями / подзапросами SQL - PullRequest
0 голосов
/ 31 августа 2018

Я использую 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 утверждают, что я не должен этого делать. Кто-нибудь может помочь мне понять, как исправить эту ошибку?

1 Ответ

0 голосов
/ 31 августа 2018

Я решил часть проблемы.

Часть проблемы зависит от порядка сторон уравнения.

Итак, я определил, что это приводит к ошибке:

(
SELECT TOP 1 AssessmentAcuityType
FROM vw_IntakeAssessmentAcuityScores
WHERE vw_IntakeAssessmentAcuityScores.ClientID=HIFIS_Clients_HousePlacements.ClientID
)

А это не

(
SELECT TOP 1 AssessmentAcuityType
FROM vw_IntakeAssessmentAcuityScores
WHERE HIFIS_Clients_HousePlacements.ClientID=vw_IntakeAssessmentAcuityScores.ClientID
)
...