0

私はdbとSqlserverに比較的慣れておらず、いくつかの問題を抱えています。そのため、カーソルを使用している手順があり、次にカーソルがフェッチされるたびに、カーソルで使用される多くのローカル変数を提供しています。

DECLARE @tempTotalValue TABLE (Id int, IT float, Total float,  PlannedDate smalldatetime, PeriodStart smalldatetime)

DECLARE curs CURSOR FOR 

SELECT 
 ...,
 ...,  
 ...,
 ...,
 ...

FROM 
Order

現在、カーソル内で別のプロシージャを実行しています (このプロシージャの設計は固定されており、変更できません)。そのプロシージャは、いくつかの値を計算して返すためにプロシージャでさらに使用しているテーブル変数に挿入する値を返します。

OPEN curs

FETCH NEXT FROM curs INTO @Id, @IP ,@FromDate, @ToDate, @Length, @Amount 

WHILE @@FETCH_STATUS = 0

    BEGIN 

        DECLARE @tempIT TABLE(TI nvarchar(20), PlannedDate smalldatetime, PeriodStart smalldatetime, PeriodLength smallint, PeriodAmount float)

        INSERT INTO @tempIT EXEC IPDates @IP, @FromDate, @ToDate, @Length, @Amount //cannot change this procedure

        DELETE FROM @tempIT WHERE (YEAR(PlannedDate) < YEAR(DATEADD(YY, DATEDIFF(yy, 0, GETDATE()), 0))) OR YEAR(PlannedDate) > YEAR(DATEADD(YY, DATEDIFF(yy, 0, GETDATE()), 1));

        INSERT INTO @tempTotalValue 

        SELECT   
            @Id, // *this is the problem*
            0,
            PeriodAmount, 
            PlannedDate,
            PeriodStart
        FROM 
            @tempIT
        GROUP BY 
            --@Id // Not possible but i want to do it 

    FETCH NEXT FROM curs INTO @Id, @IP, @FromDate, @ToDate, @Length, @Amount

    DELETE FROM @tempIT

END 
CLOSE curs
DEALLOCATE curs

Select * from @tempTotalValue
END

私が直面している問題は、「Id」という名前のローカル変数の 1 つがカーソル内にあり、プロシージャに返されるテーブルでその変数を直接使用していることです。今、私はこのIDに従って結果でグループ化したい. しかし、それは不可能です。たとえば、下の図では、4 番目と 5 番目の行は同じ ID であり、2 番目の列 (IT) に値がある場合は将来的にグループ化したいと考えています。同じIDを複数回表示するのではなく、IDを1つだけ表示したいのですが、IT列に同じIDをすべて追加して表示したいのです。

テーブル

4

1 に答える 1

0

動的SQLをフレーム化すると、後でそれを「実行」できるようになります。それまでに、ID 値を GROUP BY 句に設定し、SQL を通常の SQL 挿入のように実行します。

于 2013-04-06T13:54:46.980 に答える