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

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

我正在使用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 :

  1. SELECT student.student_name, mark.mark_value,
  2. CASE WHEN mark.mark_value > 70 THEN 'passed'
  3. WHEN mark.mark_value BETWEEN 50 AND 60 THEN 'retake'
  4. ELSE 'failed'
  5. END AS student_result
  6. FROM student
  7. LEFT JOIN mark ON student.student_id = mark.student_id

自定义sql#2,命名为 arearesult :

  1. SELECT school.area, school.area_code, student.student_name, testresult.student_result
  2. FROM school
  3. LEFT JOIN student ON school.school_id = student.school_id
  4. INNER JOIN testresult ON school.student_name = testresult.student_name

在我尝试创建自定义sql#2之前,一切都很好 arearesult . 似乎tableau不将自定义sql识别为表。有什么我能做的吗?
请注意,由于我的真实数据的条件,只能通过连接3个表来完成,正如我上面解释的,而不是使用1个sql脚本。我知道根据我在示例中提供的数据,使用1sql脚本是可能的,而且更容易。但事实上我就是做不到。

to94eoyn

to94eoyn1#

我认为您可以使用子查询而不是cte来完成所有这些。

  1. SELECT school.area,
  2. school.area_code,
  3. student.student_name,
  4. testresult.student_result
  5. FROM school
  6. LEFT JOIN student ON school.school_id = student.school_id
  7. INNER JOIN (SELECT student.student_name, mark.mark_value,
  8. CASE WHEN mark.mark_value > 70 THEN 'passed'
  9. WHEN mark.mark_value BETWEEN 50 AND 60 THEN 'retake'
  10. ELSE 'failed'
  11. END AS student_result
  12. FROM student
  13. LEFT JOIN mark ON student.student_id = mark.student_id) testresult ON school.student_name = testresult.student_name

相关问题