我需要使用SQL查询创建一个具有一年共同时间间隔的表,使用百分比完成变量以及序列号:
S/N Percentage Month
1 8% June
2 17% July
3 25% August
...
...
12 100% May
我想问一下是否有更清洁/有效的方法。
我最初的方法是首先使用递归CTE创建时间间隔和序列号,然后创建下一个百分比属性。
谢谢!
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
您可以使用syscat.columns表生成month和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
)