Sql 创建季节和年份作为常量值的列表

Sql 创建季节和年份作为常量值的列表,sql,oracle,date,join,recursive-query,Sql,Oracle,Date,Join,Recursive Query,我想生成一个季节和年份列表,即当前年份+3年前的FA2019、WI2019、SP2019、SU2019。然后将其输入WHERE子句中的另一个查询 现在我每个赛季都有4个声明,我只是把它们结合在一起。有没有较短的方法可以做到这一点 SELECT 'FA' || YYYY AS SSYYYY FROM ( SELECT to_number(to_char(SYSDATE, 'YYYY'))+LEVEL-1 AS YYYY FROM dual CONNECT BY LEVEL <= 4) UN

我想生成一个季节和年份列表,即当前年份+3年前的FA2019、WI2019、SP2019、SU2019。然后将其输入WHERE子句中的另一个查询

现在我每个赛季都有4个声明,我只是把它们结合在一起。有没有较短的方法可以做到这一点

SELECT 'FA' || YYYY AS SSYYYY FROM (
SELECT to_number(to_char(SYSDATE, 'YYYY'))+LEVEL-1 AS YYYY FROM dual
CONNECT BY LEVEL <= 4)

UNION

SELECT 'WI' || YYYY AS SSYYYY FROM (
SELECT to_number(to_char(SYSDATE, 'YYYY'))+LEVEL-1 AS YYYY FROM dual
CONNECT BY LEVEL <= 4)

UNION

SELECT 'SP' || YYYY AS SSYYYY FROM (
SELECT to_number(to_char(SYSDATE, 'YYYY'))+LEVEL-1 AS YYYY FROM dual
CONNECT BY LEVEL <= 4)

UNION

SELECT 'SU' || YYYY AS SSYYYY FROM (
SELECT to_number(to_char(SYSDATE, 'YYYY'))+LEVEL-1 AS YYYY FROM dual
CONNECT BY LEVEL <= 4)
通过级别连接使用交叉连接您可以使用交叉连接两个连接查询,如:

SELECT s.SS || y.YYYY AS SSYYYY
FROM 
(
    SELECT to_number(to_char(SYSDATE, 'YYYY')) + LEVEL - 1 AS YYYY 
    FROM dual 
    CONNECT BY LEVEL <= 4
) y
CROSS JOIN (
    SELECT DECODE(level, 1, 'FA', 2, 'WI', 3, 'SP', 4, 'SU') AS SS 
    FROM dual 
    CONNECT BY LEVEL <= 4
) s
ORDER BY y.YYYY, s.SS
返回:

| SSYYYY | | :----- | | FA2019 | | SP2019 | | SU2019 | | WI2019 | | FA2020 | | SP2020 | | SU2020 | | WI2020 | | FA2021 | | SP2021 | | SU2021 | | WI2021 | | FA2022 | | SP2022 | | SU2022 | | WI2022 | 请尝试以下操作:

   SELECT DECODE(MOD(level, 4), 1, 'FA', 2, 'WI', 3, 'SP', 'SU') ||   
          TO_CHAR(EXTRACT (YEAR FROM SYSDATE) + FLOOR((LEVEL-1) / 4))
     FROM DUAL 
  CONNECT BY LEVEL <= 16;
   SELECT DECODE(MOD(level, 4), 1, 'FA', 2, 'WI', 3, 'SP', 'SU') ||   
          TO_CHAR(EXTRACT (YEAR FROM SYSDATE) + FLOOR((LEVEL-1) / 4))
     FROM DUAL 
  CONNECT BY LEVEL <= 16;