Sql 创建季节和年份作为常量值的列表
我想生成一个季节和年份列表,即当前年份+3年前的FA2019、WI2019、SP2019、SU2019。然后将其输入WHERE子句中的另一个查询 现在我每个赛季都有4个声明,我只是把它们结合在一起。有没有较短的方法可以做到这一点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
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;