마지막 수정 날짜: 20 Jul 2023
환경
- Tableau Desktop
- SQL Server
- Teradata
- IBM DB2
답변
- 데이터 > 새 데이터 원본을 선택하고 원하는 데이터 원본을 선택합니다.
- 서버 연결 대화 상자에서 초기 SQL을 선택합니다.
- 초기 SQL 필드에 CTE를 입력합니다.
아래 예에서는 'Employees' 테이블에 반복적인 셀프 조인을 사용하여 OrganizationChart라는 이름의 일반 테이블 식을 사용한 직원 보고 계층을 작성합니다. 구문은 데이터 원본에 따라 다소 달라집니다.
SQL Server의 경우 SELECT를 쿼리 끝에 사용하지 않고 SELECT INTO [Temp Table Name]을 사용하여 로컬 임시 테이블을 만듭니다.
WITH OrganizationChart (Id, [Name], [Level], ManagerID) AS (
SELECT
Id, [Name], 0 as [Level], ManagerID
FROM
[dbo].[Employees] emp
WHERE
ManagerID IS NULL
UNION ALL
SELECT
emp.ID, emp.[Name], [Level] + 1, emp.ManagerID
FROM [dbo].[Employees] emp
INNER JOIN OrganizationChart d ON
emp.ManagerID = d.Id
)
SELECT [Id], [Name], [Level], [ManagerID] INTO #ctedemo from OrganizationChart
Teradata의 경우 CREATE VOLATILE TABLE [Temp Table Name]을 사용하여 임시 테이블을 만듭니다.
CREATE VOLATILE TABLE ctedemo AS (WITH RECURSIVE OrganizationChart (Id, Name, Level, ManagerID) AS (
SELECT
Id, Name, 0 as Level, ManagerID
FROM
TEST.Employees emp
WHERE
ManagerID IS NULL
UNION ALL
SELECT
emp.ID, emp.Name, Level + 1, emp.ManagerID
FROM TEST.Employees emp
INNER JOIN OrganizationChart d ON
emp.ManagerID = d.Id
) SELECT Id, Name, Level, ManagerID from OrganizationChart) WITH DATA NO PRIMARY INDEX
ON COMMIT PRESERVE ROWS
IBM DB2:
DECLARE GLOBAL TEMPORARY TABLE SESSION.ctedemo(ID int, Name varchar(50), Level int, ManagerID int) on commit preserve rows with replace not logged;
INSERT INTO SESSION.ctedemo(ID, Name, Level, ManagerID) WITH OrganizationChart (Id, Name, Level, ManagerID) AS (
SELECT
Id, Name, 0 as Level, ManagerID
FROM
Employees emp
WHERE
ManagerID IS NULL
UNION ALL
SELECT
emp.ID, emp.Name, Level + 1, emp.ManagerID
FROM Employees emp, OrganizationChart d
where
emp.ManagerID = d.Id
)
SELECT Id, Name, Level, ManagerID from OrganizationChart
- 레코드를 삽입한 임시 테이블에서 선택하는 사용자 지정 SQL 쿼리를 만듭니다.
예를 들어 SQL Server의 경우 다음과 같습니다.
SELECT * from #ctedemo
Teradata의 경우 다음과 같습니다.
SELECT * from ctedemo
in IBM DB2:
SELECT * FROM SESSION.ctedemo
ID |
Name |
ManagerID |
1 |
John |
NULL |
2 |
Jim |
1 |
3 |
Jane |
1 |
4 |
Tom |
3 |
5 |
Bob |
4 |
6 |
Rob |
3 |
7 |
Mike |
1 |
ID |
Name |
Level |
ManagerID |
1 |
John |
0(Impala Thrift API 오류: SSL_CTX_load_verify_locations: 오류 코드: 0) |
NULL |
2 |
Jim |
1 |
1 |
3 |
Jane |
1 |
1 |
7 |
Mike |
1 |
1 |
4 |
Tom |
2 |
3 |
6 |
Rob |
2 |
3 |
5 |
Bob |
3 |
4 |
추가 정보
Tableau에서 데이터 원본을 쿼리할 때 다음과 같은 사용자 지정 SQL이 쿼리로 전달됩니다.SELECT TOP 1 * from ( [All your Custom SQL here] ) as [TableauSQL]
SQL Server와 Teradata는 하위 쿼리의 CTE 사용을 지원하지 않으므로 오류가 발생합니다.
초기 SQL이 하위 쿼리에서 전달되지 않으며, CTE에 사용할 수 있습니다.
향후 제품 릴리스에 이 기능을 포함하도록 지지 의견을 제출하려면 다음 커뮤니티 아이디어에 한 표를 행사하십시오.
CTE compatibility with SQL Server (v. 10.0)((SQL Server(10.0 버전)와의 CTE 호환성)
이 문서의 효과에 대한 의견을 제공해 주셔서 감사합니다.
새 사례 열기
검색 계속
기술 자료
커뮤니티
제품 도움말
교육 및 자습서
관련 링크
Results 1-3 of 404