游标中select和groupby中的局部变量

时间:2013-04-06 13:51:28

标签: sql-server-2008

我对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的idinstead,并且在IT列中想要显示所有相同ID的添加。

Table

1 个答案:

答案 0 :(得分:0)

如果构建动态sql,则可以在之后“执行”它。到那时,您将在GROUP BY子句中设置您的Id值,并且sql将像任何正常的sql插件一样执行。