SQL - 这可能吗?

时间:2010-10-05 13:44:51

标签: sql sql-server-2005 row

我有一个看起来像这样的表:

--------------------------------------------
|   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,所以这可能吗?

提前致谢!

4 个答案:

答案 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)

我认为添加一个包含值的列可用作排序顺序,然后您可以根据需要更新该列,然后按该列排序。如果无法更改该表,您可以创建一个新表来保存排序列并加入两个