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”的局部变量之一在我的光标中,我直接在我为我的过程返回的表中使用该变量。现在,我想根据这个 ID 按我的结果分组。但那是不可能的。例如,在下图中,我想按第 4 行和第 5 行进行分组,因为它们具有相同的 id,并且将来当我在第二(IT)列中有一些值时。我想多次显示一个 id 而不是相同的 id,并且在 IT 列中想要显示所有相同 id 的添加。

桌子

4

1 回答 1

0

如果你框架一个动态 sql,你将能够在之后“执行”它。到那时,您将在 GROUP BY 子句中设置您的 Id 值,并且 sql 像任何普通的 sql 插入一样执行。

于 2013-04-06T13:54:46.980 回答