이 질문에 대한 훌륭한 대답은 Teradata REGEXP_SPLIT_TO_TABLE Input Parameter입니다. 아래는 내가 만들 수있는 가장 간단한 예입니다.Teradata - CTE에 대한 두 조인 StrTok_Split_To_Table 함수 - 오류 3807
두 개의 CTE (WITH 절)가있는 TERADATA 쿼리가 있습니다. 첫 번째 CTE는 사용자로부터 매개 변수를 수집하는 두 번째 CTE를 참조하는 STRTOK_SPLIT_TO_TABLE 함수를 포함합니다. 쿼리의 본문에는 첫 번째 CTE를 참조하고 분할 매개 변수의 열을 가져 오는 SELECT 문이 있습니다. 위대한 작품 :
WITH
SPLIT_PARAMS(PARAM) AS
(SELECT
TEST_TABLE.SPLIT_PARAMS
FROM
TABLE (StrTok_Split_To_Table(1, PARAMS.INPUT_PARAMS, '|')
RETURNS (outkey INTEGER, TOKENNUM INTEGER, SPLIT_PARAMS VARCHAR(8192) CHARACTER SET Unicode)) AS TEST_TABLE)
,
PARAMS (INPUT_PARAMS) AS
(SELECT
'?InputParams' AS INPUT_PARAMS
)
SELECT
SPLIT_PARAMS.PARAMS
FROM SPLIT_PARAMS
그러나 SPLIT_PARAMS CTE를 두 번 이상 참조 할 수 있기를 원합니다. 나는이 [3807] object 'PARAMS' does not exist
오류가 있다고 할 때 :
WITH
SPLIT_PARAMS(PARAM) AS
(SELECT
TEST_TABLE.SPLIT_PARAMS
FROM
TABLE (STRTOK_SPLIT_TO_TABLE(1, PARAMS.INPUT_PARAMS, '|')
RETURNS (outkey INTEGER, TOKENNUM INTEGER, SPLIT_PARAMS VARCHAR(8192) CHARACTER SET UNICODE)) AS TEST_TABLE)
,
PARAMS (INPUT_PARAMS) AS
(SELECT
'?InputParams' AS INPUT_PARAMS
)
SELECT
SP1.PARAM,
SP2.PARAM
FROM SPLIT_PARAMS SP1
CROSS JOIN SPLIT_PARAMS SP2
나는 사물의 무리를 시도 이전에 대한 답변에서 언급 조인 주 쿼리에서 두 SPLIT_PARAMS 하위 쿼리를 넣고 오래된 스타일을 사용하여 같은 것 문제. 그러나 SPLIT_PARAMS CTE에 여러 번 가입하려고하면이 오류가 발생합니다. (실제로 설정 한 세 가지 CTE는 깊지 만 그 결과는 같습니다. "PARAMS는 존재하지 않습니다."
여러 열팽창 계수가 큰 고통입니다 당신은 역순으로 정의 할 필요가 나는 경향 휘발성 테이블을 사용하십시오. – Andrew
감사합니다 @ 앤드류, 나는 여러 CTE를 꽤 많이 사용하고 역 순서 제약 조건에 익숙해 져 있습니다. 여기에있는 문제는 'STRTOK_SPLIT_TO_TABLE' 함수가 포함 된 CTE에 대한 다중 조인과 관련이 있습니다 . 휘발성 테이블에 관해서, 동료들은 Crystal Reports/BOXI에서 작업하지 않는다고 전합니다. 우리가 게시하는 데 사용하는 프런트 엔드입니다. –