我对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的添加。
答案 0 :(得分:0)
如果构建动态sql,则可以在之后“执行”它。到那时,您将在GROUP BY子句中设置您的Id值,并且sql将像任何正常的sql插件一样执行。