Используйте CTE для генерации тестовых данных в SQL - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь использовать CTE для создания таблицы данных для модульного теста в SQL (postgresql).

WITH temp1 AS (
SELECT
  ('A', 'A', 'B', 'B') AS grp,
  (1, 2, NULL, 1) AS outcome
)

SELECT * 
FROM temp1

Приведенный выше запрос генерирует одну строку, а не 4 Строка, которая будет полезна для моего модульного теста. Как мне сгенерировать 4-рядную таблицу в виде:

grp.....outcome
A.......1
A.......2
B.......NULL
B.......1

Ответы [ 3 ]

1 голос
/ 26 марта 2020

Вы можете просто использовать синтаксис values() для создания строк, например:

with temp1(grp, outcome) as (values ('A', 1), ('A', 2), ('B', null), ('B', 1))
select * from temp1

Демонстрация на БД Fiddle :

grp | outcome
:-- | ------:
A   |       1
A   |       2
B   |    <em>null</em>
B   |       1
1 голос
/ 26 марта 2020

Вам не нужен CTE. Используйте UNION ALL, как в:

select 'A' as grp, 1 as outcome
union all select 'A', 2
union all select 'B', null
union all select 'B', 1
0 голосов
/ 26 марта 2020
WITH temp1 AS (
SELECT  'A' as grp ,1 as outcome
UNION 
SELECT  'A', 2
UNION
SELECT 'B',NULL
UNION 
SELECT 'B',1
) SELECT * FROM temp1
...