SQL使用来自另一行的数据更新一个单行表

SQL使用来自另一行的数据更新一个单行表,sql,sql-server,Sql,Sql Server,我有两张桌子。第一个是12个月内的所有变动,第二个是同一时期登记的索赔。当我从第一个表运行以下查询时,我有10条记录。当然,还有其他具有不同移动次数的记录(例如:7、23、2个移动): 对于第二个查询,对于第二个表,我得到以下结果: select c.cod_suc ,c.cod_ramo_comercial ,c.[No. Policy] ,c.Item ,c.[ID Incident] ,max(c.id_pv) as id_pv

我有两张桌子。第一个是12个月内的所有变动,第二个是同一时期登记的索赔。当我从第一个表运行以下查询时,我有10条记录。当然,还有其他具有不同移动次数的记录(例如:7、23、2个移动):

对于第二个查询,对于第二个表,我得到以下结果:

select c.cod_suc
      ,c.cod_ramo_comercial
      ,c.[No. Policy]
      ,c.Item
      ,c.[ID Incident]
      ,max(c.id_pv) as id_pv
      ,count(distinct [No. Incident]) as 'Conteo R12'
from #claims as c
where c.[ID Incident] = 343632
group by c.cod_suc
        ,c.cod_ramo_comercial
        ,c.[No. Policy]
        ,c.Item
        ,c.[ID Incident];

现在,我需要更新第一个表,但只更新一条记录。我正在使用以下查询,但所有记录都在更新中。当我对结果求和时,我有10个,但只是一个声明,如第二个查询所示

update p
set [No. Siniestros R12] = b.[Conteo R12]
from temp_portafolio_personal_accidents p
    left join
     (select c.cod_suc
            ,c.cod_ramo_comercial
            ,c.[No. Policy]
            ,c.Item
            ,c.[ID Incident]
            ,max(c.id_pv) as id_pv
            ,count(distinct [No. Incident]) as 'Conteo R12'
      from
           #claims as c
      where c.[ID Incident] = 343632
      group by c.cod_suc
              ,c.cod_ramo_comercial
              ,c.[No. Policy]
              ,c.Item
              ,c.[ID Incident]
     ) b
        on p.id_pv = b.id_pv
           and p.cod_suc = b.cod_suc
           and p.cod_ramo_comercial = b.cod_ramo_comercial
           and p.Poliza = b.[No. Policy]
           and p.Item = b.Item
where p.id_pv = 788383;

您可以将CTE与
行号()函数一起使用来执行此操作。简单的例子:

DECLARE @TABLE AS TABLE (Testing INT, Testing2 VARCHAR(55), Testing3 BIT);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);

WITH CTE AS 
(
    SELECT
         ROW_NUMBER() OVER (ORDER BY Testing) AS RowID
        ,Testing
        ,Testing2
        ,Testing3
    FROM @TABLE
)
UPDATE CTE
SET Testing = 2, Testing2 = '2', Testing3 = 0
WHERE RowID = 1
;
SELECT * FROM @TABLE
;

您的表temp\u portapfolio\u personal\u有一个id(唯一的行标识符)?能否指定要更新的“一条记录”?他们中的任何一个都可以?为什么要使用“左连接”?如果没有相应的记录,那么您是否会将[no..R12]设置为NULL?无论要更新的记录是什么。我在表temp\u portapolio\u personal\u contractions中没有唯一的ID,但我可以自由添加一个新列,可能带有行号
DECLARE @TABLE AS TABLE (Testing INT, Testing2 VARCHAR(55), Testing3 BIT);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);
INSERT INTO @TABLE VALUES (1, '1', 1);

WITH CTE AS 
(
    SELECT
         ROW_NUMBER() OVER (ORDER BY Testing) AS RowID
        ,Testing
        ,Testing2
        ,Testing3
    FROM @TABLE
)
UPDATE CTE
SET Testing = 2, Testing2 = '2', Testing3 = 0
WHERE RowID = 1
;
SELECT * FROM @TABLE
;