Sql 将日期范围透视到多行中

Sql 将日期范围透视到多行中,sql,pivot,vertica,Sql,Pivot,Vertica,我有一个表T,格式如下: 客户名称 开始月 月末 X 2018年12月 2021年1月 试试这个: WITH indata(clientname,startmonth,endmonth) AS( SELECT 'x',DATE '2018-12-01', DATE '2021-01-01' ) , -- a series of at least 3 integers - no other way ... y(y) AS ( SELECT 1 UNION ALL SELEC

我有一个表T,格式如下:

客户名称 开始月 月末 X 2018年12月 2021年1月 试试这个:

WITH
indata(clientname,startmonth,endmonth) AS(
  SELECT 'x',DATE '2018-12-01', DATE '2021-01-01'
)
,
-- a series of at least 3 integers - no other way ...
y(y) AS (
          SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
)
SELECT 
  clientname
,  TO_CHAR(ADD_MONTHS(startmonth,(y-1)*12),'Mon-YYYY')
 ||'-'
 ||TO_CHAR(ADD_MONTHS(startmonth,(y-1)*12+11),'Mon-YYYY') AS monthrange
, y AS "year#"
FROM indata CROSS JOIN y
WHERE ADD_MONTHS(startmonth,(y-1)*12) <= endmonth
ORDER BY y;

clientname|monthrange       |year#
x         |Dec-2018-Nov-2019|    1
x         |Dec-2019-Nov-2020|    2
x         |Dec-2020-Nov-2021|    3

嘿,是Vertica。抱歉造成混淆。如果将StartMonth和EndingMonth更改为datetime值,则很容易确定indata是什么?indata是一个常见的表表达式;WITH子句用于包含一个或多个常用表表达式;tb1作为fullselect,tb2作为fullselect。。。。。我这里有两个常用的表表达式,分别是indata和y。