我在Tableau中使用自定义SQL选项创建了很多新的数据源,我想创建另一个新的数据源,它将包含以下内容。Select
语句引用另一个自定义SQL。例子:
数据库中提供的表 :
school
, 字段包括 : area
, area_code
, school_id
, school_name
student
,领域包括: school_id
, student_id
, student_name
mark
,领域包括: school_id
, student_id
, mark_value
自定义SQL #1,命名为 testresult
:
SELECT student.student_name, mark.mark_value,
CASE WHEN mark.mark_value > 70 THEN 'passed'
WHEN mark.mark_value BETWEEN 50 AND 60 THEN 'retake'
ELSE 'failed'
END AS student_result
FROM student
LEFT JOIN mark ON student.student_id = mark.student_id
自定义SQL#2,命名为 arearesult
:
SELECT school.area, school.area_code, student.student_name, testresult.student_result
FROM school
LEFT JOIN student ON school.school_id = student.school_id
INNER JOIN testresult ON school.student_name = testresult.student_name
在我尝试创建自定义SQL #2之前,一切都很顺利。arearesult
. 似乎Tableau不承认自定义SQL是一个表。我有什么办法可以做到这一点吗?
请注意,由于我的真实数据的条件,它只能通过连接3张表,如我上面解释的,而不是使用1个SQL脚本。我知道根据我在例子中提供的数据,使用1个SQL脚本是可行的,也更容易。但在现实中,我不能这样做。
我认为你可以使用一个子查询来代替CTE来完成所有这些工作。
SELECT school.area,
school.area_code,
student.student_name,
testresult.student_result
FROM school
LEFT JOIN student ON school.school_id = student.school_id
INNER JOIN (SELECT student.student_name, mark.mark_value,
CASE WHEN mark.mark_value > 70 THEN 'passed'
WHEN mark.mark_value BETWEEN 50 AND 60 THEN 'retake'
ELSE 'failed'
END AS student_result
FROM student
LEFT JOIN mark ON student.student_id = mark.student_id) testresult ON school.student_name = testresult.student_name