如何在Oracle中获取一个变量的多个条目?
我有这个:如何在Oracle中获取一个变量的多个条目?,oracle,group-by,oracle-sqldeveloper,Oracle,Group By,Oracle Sqldeveloper,我有这个: var weekend weekstart x 50_13 43_13 我需要这个: var week x 43 x 44 x 45 x 46 x 47 x 48 x 49 x 50 出路是什么?这条路应该行得通: CREATE TABLE weeks ( var VARCHAR2(10), weekend VARCHAR2(5), weekstart VARCHAR2(5)); INSERT INTO w
var weekend weekstart
x 50_13 43_13
我需要这个:
var week
x 43
x 44
x 45
x 46
x 47
x 48
x 49
x 50
出路是什么?这条路应该行得通:
CREATE TABLE weeks ( var VARCHAR2(10), weekend VARCHAR2(5), weekstart VARCHAR2(5));
INSERT INTO weeks VALUES ('x', '50_13','43_13');
WITH
startDay AS
(SELECT var, MIN(TO_DATE('01-01-2000','dd-mm-yyyy') + LEVEL) AS start_date
FROM weeks
WHERE TO_CHAR(TO_DATE('01-01-2000','dd-mm-yyyy') + LEVEL, 'IW_RR') = weekstart
CONNECT BY TO_DATE('01-01-2000','dd-mm-yyyy') + LEVEL < TO_DATE('01-01-2100','dd-mm-yyyy')
GROUP BY var),
endDay AS
(SELECT var, MIN(TO_DATE('01-01-2000','dd-mm-yyyy') + LEVEL) AS end_date
FROM weeks
WHERE TO_CHAR(TO_DATE('01-01-2000','dd-mm-yyyy') + LEVEL, 'IW_RR') = weekend
CONNECT BY TO_DATE('01-01-2000','dd-mm-yyyy') + LEVEL < TO_DATE('01-01-2100','dd-mm-yyyy')
GROUP BY var)
SELECT var, TO_CHAR(start_date + 7*(LEVEL-1), 'IW') AS week
FROM startDay
JOIN endDay USING (var)
CONNECT BY start_date + 7*(LEVEL-1) <= end_date;
VAR WEEK
x 43
x 44
x 45
x 46
x 47
x 48
x 49
x 50
先决条件是,初始日期01-01-2000必须小于表中可能出现的最小数字,最大日期01-01-2100必须大于可能出现的最大数字。这在某种程度上解决了我的问题:
select x, weekstart + level - 1
from
myTable
connect by level <= weekend - weekstart + 1
具体点。第一件事是什么?它是PL/SQL中的查询结果、表或对象变量。有几排?您需要SQL还是过程代码?你已经试过什么了?我只有三个专栏。var、weekstart和weekend。但我有多行。我需要为每个变量每周生成一个记录。您可以将其视为解组,但问题是我没有一个要解组的值列表。我必须生成所有介于weekstart和weekend之间的数字。您必须使用pl/sql。从本质上讲,使用直接SQL来实现这一点并不简单。这看起来不同,我怀疑您是否可以向字符串43添加任何内容_13@Wernfried-只有在一年内只有周数时,这才有效。我的错。你的方法是正确的:顺便说一句,如果你的射程过了新年,它也会起作用。