преобразовать входную таблицу в указанную выходную таблицу с помощью SQL - PullRequest
0 голосов
/ 02 мая 2018

Я хочу преобразовать входную таблицу в указанную выходную таблицу с помощью оператора SQL. Может ли кто-нибудь помочь мне в этом.

Таблица ввода

+-------------+-----------+----------+
| start_value | end_value | interval |
+-------------+-----------+----------+
|           0 |       120 |       10 |
|           1 |       150 |       50 |
+-------------+-----------+----------+

OUTPUT

+-----------------+-----------+------------------+
|     start_value | end_value | next_start_value |
+-----------------+-----------+------------------+
|               0 |       120 |                0 |
|               0 |       120 |               10 |
|               0 |       120 |               20 |
|               0 |       120 |               30 |
+-----------------+-----------+------------------+

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Поскольку MTD ' ответ на самом деле не полностью соответствует ожидаемой структуре выпуска, основываясь на его / ее подходе, я бы предложил этот измененный ответ:

WITH output (start_value, end_value, "INTERVAL", next_start_value) AS (
  SELECT start_value, end_value, "INTERVAL", start_value AS next_start_value
    FROM input
UNION ALL
  SELECT start_value,
         end_value,
         "INTERVAL",
         next_start_value + "INTERVAL" AS next_start_value
    FROM output
   WHERE next_start_value + "INTERVAL" <= end_value
)
SELECT start_value, end_value, next_start_value
  FROM output
 ORDER BY 1, 2, 3;

РЕДАКТИРОВАТЬ : Добавление результата запроса:

START_VALUE | END_VALUE | NEXT_START_VALUE
------------+-----------+-----------------
          0 |       120 |                0
          0 |       120 |               10
          0 |       120 |               20
          0 |       120 |               30
          0 |       120 |               40
          0 |       120 |               50
          0 |       120 |               60
          0 |       120 |               70
          0 |       120 |               80
          0 |       120 |               90
          0 |       120 |              100
          0 |       120 |              110
          0 |       120 |              120
          1 |       150 |                1
          1 |       150 |               51
          1 |       150 |              101

Это SQL-скрипта для него.

0 голосов
/ 02 мая 2018

SQL Fiddle

Настройка схемы Oracle 11g R2 :

CREATE TABLE input ( start_value, end_value, "INTERVAL" ) AS
SELECT 0, 120, 10 FROM DUAL UNION ALL
SELECT 1, 150, 50 FROM DUAL;

Запрос 1 :

WITH output ( rn, start_value, end_value, "INTERVAL", next_start_value ) AS (
  SELECT ROWNUM, i.*, start_value FROM input i
UNION ALL
  SELECT rn,
         start_value,
         end_value,
         "INTERVAL",
         next_start_value + "INTERVAL"
  FROM   output
  WHERE  next_start_value + "INTERVAL" <= end_value
)
SELECT start_value, end_value, next_start_value
FROM   output
ORDER BY rn, next_start_value

Результаты

| START_VALUE | END_VALUE | NEXT_START_VALUE |
|-------------|-----------|------------------|
|           0 |       120 |                0 |
|           0 |       120 |               10 |
|           0 |       120 |               20 |
|           0 |       120 |               30 |
|           0 |       120 |               40 |
|           0 |       120 |               50 |
|           0 |       120 |               60 |
|           0 |       120 |               70 |
|           0 |       120 |               80 |
|           0 |       120 |               90 |
|           0 |       120 |              100 |
|           0 |       120 |              110 |
|           0 |       120 |              120 |
|           1 |       150 |                1 |
|           1 |       150 |               51 |
|           1 |       150 |              101 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...