Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
如何在Oracle中获取一个变量的多个条目?_Oracle_Group By_Oracle Sqldeveloper - Fatal编程技术网

如何在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-只有在一年内只有周数时,这才有效。我的错。你的方法是正确的:顺便说一句,如果你的射程过了新年,它也会起作用。