私は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をすべて追加して表示したいのです。