我正在尝试执行一个存储过程,该过程对于每个位置 =“Ubicacion”(计算固定资产的数量 = Ubicacion,将这些资产的价值相加,并将这些资产折旧的金额相加)对于当前放置在该位置的资产。问题是光标似乎只获取一次
查询光标:
SELECT DISTINCT (ubicacion) FROM
(SELECT activo, ubicacion, Fecha_Ubicacion, row_number() OVER (
partition BY activo ORDER BY abs(datediff(dd, Fecha_Ubicacion, getdate()))
) AS RowNum FROM [SISACT].ACTIVO_UBICACION) someAlias WHERE RowNum = 1
结果:
Ubicacion
----------
1114
4450
4353
它应该获取 3 次。“位置”中的每条记录一个,并且只有位置中的最新记录。
ALTER PROCEDURE [SISACT].[resume_activos]
AS
BEGIN
DECLARE @u CHAR(8);
DECLARE @p VARCHAR(8);
DECLARE @num_activos INT = 0;
DECLARE @monto_activos FLOAT = 0;
DECLARE @saldo_dep_activos FLOAT = 0;
DECLARE U CURSOR STATIC
FOR SELECT DISTINCT (ubicacion) FROM
(SELECT activo, ubicacion, Fecha_Ubicacion, row_number() OVER (
partition BY activo ORDER BY abs(datediff(dd, Fecha_Ubicacion, getdate()))
) AS RowNum FROM [SISACT].ACTIVO_UBICACION) someAlias WHERE RowNum = 1
OPEN U
FETCH NEXT FROM U INTO @u
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @num_activos = COUNT(a.Activo), @monto_activos = SUM(a.Costo_adquisicion), @saldo_dep_activos = SUM(a.Saldo_a_depreciar) FROM [SISACT].ACTIVOS_FIJOS a, [SISACT].UBICACIONES ub, (SELECT activo, ubicacion, Fecha_Ubicacion, row_number() OVER (
partition BY activo ORDER BY abs(datediff(dd, Fecha_Ubicacion, getdate()))
) AS RowNum FROM [SISACT].ACTIVO_UBICACION) ab WHERE RowNum = 1 AND ub.Ubicacion = @u AND a.Activo = ab.Activo AND ab.Ubicacion = @u
PRINT 'Ubicacion: ' +@u +' Num activos: ' + CONVERT(VARCHAR, @num_activos) + ' monto activos: ' + CONVERT(VARCHAR, @monto_activos) + ' saldo activos depreciados: '+ CONVERT(VARCHAR, @saldo_dep_activos)
FETCH NEXT FROM U INTO @u
END
CLOSE U
DEALLOCATE U
END
“打印”语句仅在“消息”选项卡中显示一次,其中包含第一个位置和我之前所说的计算,加上它没有返回任何内容,我希望它返回类似这样的内容
Ubicacion | Num_Act | Monto_Act | Saldo_dep_Act
------------------------------------------------
4453 | 2 | 5787.65 | 332.247
我是 T-SQL 的新手,所以如果我做错了非常愚蠢的事情,请原谅我,我之前只用游标做过 SP,它工作正常(它没有返回任何东西)。
我究竟做错了什么?
先感谢您。