自定义sql表中基于另一个自定义sql的select语句

anhgbhbe  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(375)

我正在使用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脚本。我知道根据我在示例中提供的数据,使用1sql脚本是可能的,而且更容易。但事实上我就是做不到。

to94eoyn

to94eoyn1#

我认为您可以使用子查询而不是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

相关问题