Sql server SQL Server 2016,游标

Sql server SQL Server 2016,游标,sql-server,Sql Server,我想使用SQL Server游标跳转一个表(tblSummary)的记录,并基于第二个表(tblDetails)中该表的更新列EndValues)中的值 下面的查询可以达到预期的结果,但我需要游标: SELECT d.id, d.subgroup, d.fraq, d.subaccount, EndValues = d.fraq*s.amount FROM tblDetails d LEFT JOIN tblSummary s ON d.ID = s.id

我想使用SQL Server游标跳转一个表(
tblSummary
)的记录,并基于第二个表(
tblDetails
)中该表的更新列
EndValues
)中的值

下面的查询可以达到预期的结果,但我需要游标:

SELECT d.id, d.subgroup, d.fraq, d.subaccount, EndValues = d.fraq*s.amount
FROM tblDetails d
LEFT JOIN tblSummary s ON d.ID = s.id 
                       AND LEFT(d.SubAccount,2) = s.mainAccount
我附加了两个.sql脚本,一个准备所有必要的数据(数据设置),另一个带有预填充游标(cursor.sql)。任何一个更新游标的方式都可以使我得到与上述查询相同的结果吗

--数据设置

--CREATE TABLES
CREATE TABLE tblSummary
(
    ID varchar(11),
    [MainAccount] varchar(12),
    [Amount] numeric (10, 3)
) 

CREATE TABLE tblDetails
(
    ID varchar(11),
    SubGroup varchar(30),
    Fraq numeric (10, 3),
    SubAccount int,
    EndValues numeric (10, 3) NULL
)

--POPULATE TABLES
INSERT INTO tblDetails (ID, SubGroup, Fraq, SubAccount, EndValues) 
VALUES
('Garden', 'Sub1', 0.2,101,NULL),
('Garden', 'Sub2', 0.5,102,NULL),
('Garden', 'Sub3', 0.3,103,NULL),
('Garden', 'Sub1', 0.1,201,NULL),
('Garden', 'Sub2', 0.5,202,NULL),
('Garden', 'Sub3', 0.9,203,NULL),
('Home', 'Sub1', 0.1,101,NULL),
('Home', 'Sub2', 0.3,102,NULL),
('Home', 'Sub3', 0.5,103,NULL),
('Home', 'Sub1', 0.8,201,NULL),
('Home', 'Sub2', 0.1,202,NULL),
('Home', 'Sub3', 0.1,203,NULL)



INSERT INTO tblSummary (ID, MainAccount, Amount) VALUES 
('Garden',10,1000),
('Garden',20,1200),
('Home',10,2000),
('Home',20,2500)


--DESIRED OUTPUT
SELECT d.id, d.subgroup, d.fraq, d.subaccount,EndValues=d.fraq*s.amount
FROM tblDetails d
LEFT JOIN tblSummary s 
ON d.ID=s.id and LEFT(d.SubAccount,2) = s.mainAccount
--光标


我不确定,我真的理解你们的问题,但你们可以把你们的查询保持原样,并为它声明一个游标

DECLARE my_second_cursor CURSOR FOR
SELECT d.id, d.subgroup, d.fraq, d.subaccount,EndValues=d.fraq*s.amount
  FROM tblDetails d
  LEFT JOIN tblSummary s 
  ON d.ID=s.id and LEFT(d.SubAccount,2) = s.mainAccount

FETCH NEXT FROM my_second_cursor into @id, @subgroup, @fraq, @subacount, @endvalues

我不知道为什么你需要光标,几乎没有人需要光标

是否要使用
select
查询中的计算更新
EndValues

你已经有了答案,所以除非你的问题有什么我不理解的地方,否则你就这么做

update d set
    d.EndValues=d.Fraq*s.Amount
from tblDetails d
left join tblSummary s 
on d.ID=s.ID and Left(d.SubAccount,2) = s.MainAccount
解释为什么你认为你需要一个光标。在编写良好的tsql中,游标通常很少见,但它们通常是一些难以处理基于集合的编码的人的产物。
update d set
    d.EndValues=d.Fraq*s.Amount
from tblDetails d
left join tblSummary s 
on d.ID=s.ID and Left(d.SubAccount,2) = s.MainAccount