2017-02-23 109 views
1

我有两个表。第一次在12个月内有所有变动,第二次在同一段时间登记。当我从第一个表中运行以下查询时,我有10条记录。当然,还有其他的记录具有不同数目的动作(例如:7,23,2个运动):SQL使用另一个数据更新一个单行表

select t.cod_suc 
     ,t.cod_ramo_comercial 
     ,t.Poliza 
     ,t.Item 
     ,t.id_pv 
from temp_portafolio_personal_accidents as t 
where t.cod_suc = 2 
     and t.cod_ramo_comercial = 46 
     and t.Poliza = 50283 
     and t.Item = 1 
     and t.id_pv = 788383; 

enter image description here

在第二查询中,第二个表,我有以下结果:

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]; 

enter image description here

现在,我需要更新的第一个表,但只有一个记录。我正在使用以下查询,但所有记录正在更新。当我总结结果时,我有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; 
+1

你的表temp_portafolio_personal_accidents有一个ID(其唯一行标识符)? – scaisEdge

+1

你能指定你想更新哪一个“一条记录”吗?他们中的任何一个会做? – DVT

+0

为什么使用“左连接”?如果没有相应的记录,那么你会设置[No. ... R12]为NULL? – DVT

回答

1

您可以使用CTE与ROW_NUMBER()功能来做到这一点。简单的例子:

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 
; 
相关问题