Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在1年期间内创建具有公共时间段的修复表_Sql_Db2_Common Table Expression - Fatal编程技术网

Sql 在1年期间内创建具有公共时间段的修复表

Sql 在1年期间内创建具有公共时间段的修复表,sql,db2,common-table-expression,Sql,Db2,Common Table Expression,我需要使用SQL查询创建一个具有跨一年的公共时间间隔的表,其中包含完成百分比变量以及序列号: S/N Percentage Month 1 8% June 2 17% July 3 25% August ... ... 12 100% May 我想问一下,是否有一种更干净/更有效的方法 我最初的方法是首先使用递归CT

我需要使用SQL查询创建一个具有跨一年的公共时间间隔的表,其中包含完成百分比变量以及序列号:

S/N     Percentage        Month
1          8%             June
2          17%            July
3          25%            August
...
...
12         100%           May
我想问一下,是否有一种更干净/更有效的方法

我最初的方法是首先使用递归CTE创建时间间隔和序列号,然后创建percentage属性


谢谢大家!

您可以使用syscat.columns表生成月份和行数函数以获取百分比

以下是查询:-

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
        )

您可以使用syscat.columns表生成月份和行数函数以获取百分比

以下是查询:-

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
        )

DB2z/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

DB2z/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
您可以添加示例DDL创建表和数据值。。。帮助人们准确回答您的问题。或者,也可以查看OLAP函数来计算序列号和运行百分比值。您可以添加示例DDL创建表和数据值。。。帮助人们准确回答您的问题。或者也可以查看OLAP函数来计算序列号和运行百分比值