SQL - для каждого идентификатора значения в других столбцах должны повторяться - PullRequest
0 голосов
/ 08 октября 2019

Таблица, которую я пытаюсь создать, должна выглядеть следующим образом:

**ID** **Timeframe** Value
1            60        15
1            60        30
1            90        45
2            60        15
2            60        30
2            90        45
3            60        15
3            60        30
3            90        45

Поэтому для каждого идентификатора следует повторять значения 60,60,90 и 15,30,45. Может ли кто-нибудь помочь мне с кодом? :)

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Вы ищете cross join. Основная идея выглядит примерно так:

select i.id, tv.timeframe, tv.value
from (values (1), (2), (3)) i(id) cross join
     (values (60, 15), (60, 30), (90, 45)) tv(timeframe, value)
order by i.id, tv.value;

Не все базы данных поддерживают конструктор таблиц values(). В этих базах данных вам нужно будет использовать соответствующий синтаксис.

0 голосов
/ 08 октября 2019

Итак, у вас есть эта таблица: ...

id
 1 
 2
 3

и у вас есть эта таблица: ...

timeframe  value
       60     15  
       60     30  
       90     45  

Затем попробуйте это:

WITH
-- the ID table...
id(id) AS (
          SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
)   
,   
-- the values table:
vals(timeframe,value) AS (
          SELECT 60,15
UNION ALL SELECT 60,30
UNION ALL SELECT 90,45
)   
SELECT
  id  
, timeframe
, value
FROM id CROSS JOIN vals
ORDER BY id, timeframe;
-- out  id | timeframe | value 
-- out ----+-----------+-------
-- out   1 |        60 |    30
-- out   1 |        60 |    15
-- out   1 |        90 |    45
-- out   2 |        60 |    30
-- out   2 |        60 |    15
-- out   2 |        90 |    45
-- out   3 |        60 |    30
-- out   3 |        60 |    15
-- out   3 |        90 |    45
-- out (9 rows)                                                                                                                 
...