2013-04-06 53 views
0

我對db和Sqlserver比較新,並且遇到一些問題。所以,我有一個程序,在這個程序中我使用了一個遊標,並且每當遊標提取時,我都會提供很多局部變量供遊標使用。局部變量在select和groupby在遊標裏面

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 
      [email protected] // 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的添加。

Table

+0

那麼當您將第4行和第5行組合時,您想要顯示哪個PlannedDate和PeriodStart?當PeriodAmount/Total在兩行上的值不同時,您想要執行什麼操作?當通過對一列進行分組摺疊行時,其值不同的任何其他列必須被聚合或不包括在內。 – 2013-04-06 15:58:15

回答

0

如果幀動態SQL,你將能夠經過「執行」它。屆時,您將在GROUP BY子句中設置您的Id值,並像任何常規的SQL插入一樣執行sql。