以下是我的例子,感谢您的帮助!
我创建了一个包含两列的temp_table: agency_id 和预算。下一步,我需要使用agency_id查找报告预算的最新日期,这当然会有所不同。因此,我考虑将列agency_id设置为变量,并将其插入到生成具有最新报告日期的数据的查询中。
这是我的代码失败:
declare @agency int
set @agency = (select agency_id from ##temp1)
然而,它给了我这个错误信息: 子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
这就是我想用它的方式:
select max(report_date), @agency from budgets
我该如何解决这个问题? 光标方法?
非常感谢你!
答案 0 :(得分:1)
您面临的挑战是,您希望存储项目列表,然后进行计算并提供项目列表和最大日期。 SQL将为您优化该代码,并以更快的速度为您提供该列表。
您需要查看SQL中的GROUP BY术语
SELECT Agency, MAX(Report_date) FROM Budgets GROUP BY agency
我建议你看一下Microsoft Documentation:
如果正确索引字段,也可以更快地进行此操作
答案 1 :(得分:1)
Try the below instead of Cursors
Create TABLE Temp( ID int IDENTITY(1,1),
Agency_id int,
budget int)
DECLARE @I=1
DECLARE @COUNT INT
DECLARE @Agency
SELECT @COUNT = COUNT(*) FROM temp table
WHILE (@I<=@COUNT)
BEGIN
SELECT @Agency = Agency FROM temp table WHERE ID = @I
SELECT max(report_date), Agency FROM budgets WHERE Agency = @Agency
SET @I = @I+1;
END