分组后的Sql Update Count Details

时间:2016-07-04 11:19:06

标签: sql sql-server jointable

我的SQL Server数据库中有多个表。

我有一个表Table A,其中包含dispatch,filename,等字段

第二个表格说Table Bfiledetailsfilename, dispatchcount, totalcount等。

两个表中还有许多其他字段,但与此问题无关。

要求是:

我想在将发送为Y的Table B客户分组后更新Table A发送计数。

由于我想使用分组结果更新表B,我应该创建结果的临时表,或者请指导:

查询:

update Collation_Data set Dqty=T.count1 
from (select [collation_code],count(1) as 'count1'
FROM  [Tatkal].[dbo].[Tatkal_Merge] T 
where Dscan='Y'
group by [collation_code]) where srno=T.[collation_code]

2 个答案:

答案 0 :(得分:2)

在SQL Server中,您可以将join与聚合查询一起使用。我想指出,如果您要更新left join中的所有行,您应该使用collation_data,即使那些没有匹配的行:

  update c
     set c.Dqty = cm.cnt 
  from Collation_Data c left join
       (select collation_code, count(*) as cnt
        from [Tatkal].[dbo].[Tatkal_Merge] m
        where Dscan = 'Y'
        group by collation_code
       ) cm
       on c.srno = cm.collation_code;

您也可以使用相关子查询执行此操作:

update Collation_Data c
    set Dqty = (select count(*)
                from [Tatkal].[dbo].[Tatkal_Merge] m
                where m.Dscan = 'Y' and m.collation_code = c.collation_code
               );

对于Tatkal_Merge(collation_code, Dscan)上的索引,这可能非常有效。

答案 1 :(得分:0)

  

我想使用分组结果更新表B我应该创建结果的临时表还是请指导

   update c
     set c.Dqty=T.count1 
    from Collation_Data  c
    join
    (select [collation_code],count(1) as 'count1'
    FROM  [Tatkal].[dbo].[Tatkal_Merge] 
    where Dscan='Y'
    group by [collation_code])t
     on c.srno=T.[collation_code]