(Отправка вопроса от имени пользователя Snowflake)
Я получаю неправильный вывод при использовании CTE и CROSS JOINS.
Но правильный выводпри создании переходных таблиц вместо CTE:
Главный виновник - CLASS CTE
WITH
vennDimension AS
(
SELECT ROW_NUMBER() OVER (ORDER BY 1) -1 AS TIMEPERIOD
FROM TABLE(GENERATOR(ROWCOUNT => 2+1))
),
nonVennDimension AS
(
SELECT ROW_NUMBER() OVER (ORDER BY 1) AS PRODUCT
FROM TABLE(GENERATOR(ROWCOUNT => 2+1))
),
class AS
(
SELECT *, CASE WHEN MOD(CLASS, 2) >= 1 THEN 1 ELSE 0 END AS Venn_Group1 ,
CASE WHEN MOD(CLASS, 4) >= 2 THEN 1 ELSE 0 END AS Venn_Group2
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY 1) AS CLASS FROM TABLE(GENERATOR(ROWCOUNT => 3 )) )b
),
view_type AS
(
SELECT * FROM VALUES (1),(2) AS tmp(view_type)
)
SELECT * FROM class
cross join (
SELECT * FROM (
SELECT * FROM
vennDimension v --all venn groups plus total
CROSS JOIN nonVennDimension nv--secondary groups
) a
CROSS JOIN (SELECT * FROM view_type) c
) a
WHERE PRODUCT=1 AND TIMEPERIOD=0
;
. Вот правильный вывод:
CREATE TRANSIENT TABLE
vennDimension_table AS
(
SELECT ROW_NUMBER() OVER (ORDER BY 1) -1 AS TIMEPERIOD
FROM TABLE(GENERATOR(ROWCOUNT => 2+1))
)
;
CREATE TRANSIENT TABLE
nonVennDimension_table AS
(
SELECT ROW_NUMBER() OVER (ORDER BY 1) AS PRODUCT
FROM TABLE(GENERATOR(ROWCOUNT => 2+1))
)
;
CREATE TRANSIENT TABLE
class_table AS
(
SELECT *, CASE WHEN MOD(CLASS, 2) >= 1 THEN 1 ELSE 0 END AS Venn_Group1 ,
CASE WHEN MOD(CLASS, 4) >= 2 THEN 1 ELSE 0 END AS Venn_Group2
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY 1) AS CLASS FROM TABLE(GENERATOR(ROWCOUNT => 3 )) )b
);
CREATE TRANSIENT TABLE
view_type_table AS
(
SELECT * FROM VALUES (1),(2) AS tmp(view_type)
)
;
SELECT * FROM class_table a
CROSS JOIN view_type_table b
CROSS JOIN nonvenndimension_table c
CROSS JOIN venndimension_table d
WHERE PRODUCT = 1 AND TIMEPERIOD=0
;
Что я делаю неправильно? Любые мысли, рекомендации и т. Д.?