在自定义SQL Tableau中,基于另一个自定义SQL的选择语句。

问题描述 投票:0回答:1

我在Tableau中使用自定义SQL选项创建了很多新的数据源,我想创建另一个新的数据源,它将包含以下内容。Select 语句引用另一个自定义SQL。例子:

数据库中提供的表 :

  1. school, 字段包括 : area, area_code, school_id, school_name
  2. student,领域包括: school_id, student_id, student_name
  3. 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脚本是可行的,也更容易。但在现实中,我不能这样做。

sql sql-server tableau tableau-server
1个回答
0
投票

我认为你可以使用一个子查询来代替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
© www.soinside.com 2019 - 2024. All rights reserved.