我对 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 的添加。