我有一个看起来像这样的表:
--------------------------------------------
| Date | House# | Subscription |
--------------------------------------------
| 3/02/10 | x | Monthly |
--------------------------------------------
| 3/03/10 | y | Weekly |
--------------------------------------------
| 3/04/10 | z | Daily |
--------------------------------------------
我需要一个带有列名和int的命令,并将这些列中的值移动到这么多级别。所以(house,1)将z放在y所在的位置,y位于x所在的位置,z将为0 / Null。而(house,2)将z放在x和y的位置,而z将变为0 / null。
我知道SQL实际上并不是逐行提取ables,所以这可能吗?
提前致谢!
答案 0 :(得分:2)
您可以使用cursors在存储过程中执行此操作。
答案 1 :(得分:1)
您可以使用PL / SQL例程。将列名和数字作为输入,然后根据需要实现逻辑。上面提到的游标是您拥有的选项之一。
答案 2 :(得分:1)
您应该使用PL / SQL,这是一个示例(不是针对此特定示例):
DECLARE
CURSOR cpaises
IS
SELECT CO_PAIS, DESCRIPCION, CONTINENTE
FROM PAISES;
co_pais VARCHAR2(3);
descripcion VARCHAR2(50);
continente VARCHAR2(25);
BEGIN
OPEN cpaises;
LOOP
FETCH cpaises INTO co_pais,descripcion,continente;
EXIT WHEN cpaises%NOTFOUND;
dbms_output.put_line(descripcion);
END LOOP;
CLOSE cpaises;
END;
我认为您可以使用变量来指示要选择和更新的列,并且在循环内部,您可以拥有一个数组,其中包含最后的 n 值。
答案 3 :(得分:0)
我认为添加一个包含值的列可用作排序顺序,然后您可以根据需要更新该列,然后按该列排序。如果无法更改该表,您可以创建一个新表来保存排序列并加入两个