将列中的所有值设置为变量

时间:2018-05-16 19:05:44

标签: sql-server tsql variables cursor

以下是我的例子,感谢您的帮助!

我创建了一个包含两列的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

我该如何解决这个问题? 光标方法?

非常感谢你!

2 个答案:

答案 0 :(得分:1)

您面临的挑战是,您希望存储项目列表,然后进行计算并提供项目列表和最大日期。 SQL将为您优化该代码,并以更快的速度为您提供该列表。

您需要查看SQL中的GROUP BY术语

SELECT Agency, MAX(Report_date) FROM Budgets GROUP BY agency

我建议你看一下Microsoft Documentation

w3Schools 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