Создание таблицы исправлений с общим периодом времени в течение 1 года - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно создать таблицу с общим временным интервалом в течение года, с переменной процентного завершения, а также серийным номером, используя SQL-запрос:

S/N     Percentage        Month
1          8%             June
2          17%            July
3          25%            August
...
...
12         100%           May

Я хотел бы спросить, есть либолее чистый / эффективный способ сделать это.

Мой оригинальный подход состоит в том, чтобы сначала создать интервал времени и серийный номер с помощью рекурсивного CTE, а затем создать атрибут процента в следующем.

Спасибовы!

Ответы [ 2 ]

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

Альтернативное решение для DB2 Z / OS

SELECT 
rownum "S/N" ,
100*( DAYS(stdt + (rownum-1) MONTH ) -  DAYS(stdt -1 MONTH ) ) /365 "Percentage" ,
VARCHAR_FORMAT(stdt + (rownum-1) MONTH,'Month') "Month"
FROM (
        SELECT ROW_NUMBER() OVER() , DATE('2018-06-01')
        FROM SYSIBM.SYSCOLUMNS 
     ) T(rownum,stdt)
WHERE rownum <=12
0 голосов
/ 10 мая 2018

Вы можете использовать таблицу syscat.columns для генерации месяцев и функцию row_number () для получения процента

Вот запрос: -

SELECT  rn "S/N",
        ROUND((rn /count(1) over())*100,0)|| '%' "Percentage",
        my_month "Month" from (
                  -- @startdate '04/01/2017' (MM/DD/YYYY) format
                   SELECT  VARCHAR_FORMAT(DATE(@startdate) + (ROW_NUMBER()OVER() - 1) MONTH,'MON') my_month,
                   ROW_NUMBER()OVER() rn 
                   FROM SYSCAT.COLUMNS where rownum <=12
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...