我假设错误来自case语句,但我不知道是什么导致了这样的问题。
下面是我的问题:
SELECT aim.student_id,
coordinator,
ac_class,
email_contact,
doc_date,
doc_exp_date,
notes,
ad.name as "Disability",
aa.name as "Accommodation",
PERSON_ID,
tse.YEAR_TERM,
ATT_CREDITS,
PRIMARY_PROGRAM_DESCRIPTION,
ACADEMIC_YEAR,
MARITAL_STATUS,
ENROLLMENT_STATUS_DESCRIPTION,
CALENDAR_YEAR,
YEAR_TERM_START_DATE,
YEAR_TERM_END_DATE,
CASE
WHEN (doc_date <= year_term_end_date AND
doc_exp_date >= year_term_end_date) THEN
1
WHEN (isnull(doc_exp_date)) THEN
1
ELSE
0
END AS "Valid Document"
FROM striker.saasta_prod.accessibility_aim aim
JOIN striker.saasta_prod.accessibility_std_disabilities asd
ON aim.student_id = asd.student_id
JOIN striker.saasta_prod.accessibility_disabilities ad
ON asd.disability_id = ad.id
LEFT JOIN striker.saasta_prod.accessibility_std_accommodations asa
ON aim.student_id = asa.student_id
LEFT JOIN striker.saasta_prod.accessibility_accommodations aa
ON asa.accommodation_id = aa.id
JOIN dwprd.ods.std_term_status_ext tse
ON aim.student_id = tse.person_id
JOIN dwprd.edw.year_term_dim ytd
ON tse.year_term = ytd.year_term
发布于 2019-09-21 07:00:42
您的联接表名有三个参数,但只允许两个:
INNER JOIN striker.saasta_prod.accessibility_std_disabilities asd
您是从SQL Server复制的吗?在SQL Server中,您可以为数据库名称添加前缀。在Oracle中不允许这样做。
发布于 2019-09-21 07:02:12
发布于 2019-09-21 07:04:16
正如Brian Leach所指出的,您引用表的方式存在一个问题:在Oracle中,您可以使用my_schema.my_table
,但不支持使用三个点分隔的部分。
在CASE
表达式中还有一个问题:
WHEN (isnull(doc_exp_date)) THEN 1
Oracle中没有ISNULL()
函数。
在SQL Server中,ISNULL()
用于检查第一个参数是否为NULL
,如果是,则将其替换为第二个参数。Oracle的等价物是NVL()
。
但由于您使用此表达式作为条件,我怀疑您实际上是指:
WHEN doc_exp_date IS NULL THEN 1
https://stackoverflow.com/questions/58035931
复制相似问题