分组后的Sql更新计数详细信息

分组后的Sql更新计数详细信息,sql,sql-server,jointable,Sql,Sql Server,Jointable,我的SQL Server数据库中有多个表 我有一个表,比如tablea,它有dispatch、filename、等字段 第二个表是表B有文件详细信息如文件名、dispatchcount、totalcount等 两个表中都有许多其他字段,但与此问题无关 要求是: 我想在分组表A客户后更新表B派送计数,其中派送为Y 由于我想使用分组结果更新表B,我应该创建一个结果临时表还是请指导: 查询: update Collation_Data set Dqty=T.count1 from (select [

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

我有一个表,比如
tablea
,它有
dispatch、filename、
等字段

第二个表是
表B
文件详细信息
文件名、dispatchcount、totalcount等

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

要求是:

我想在分组
表A
客户后更新
表B
派送计数,其中派送为Y

由于我想使用分组结果更新表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]
我想使用分组结果更新表B。我应该创建一个结果临时表还是请指导


在SQL Server中,您可以将
联接
与聚合查询一起使用。我想指出,如果要更新
排序规则\u数据
中的所有行,即使是不匹配的行,也应使用
左联接

  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\u Merge(collation\u code,Dscan)

上添加样本表数据,这会非常有效。但一般来说,听起来你需要的是一个触发器,你的子查询需要一个别名。
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
               );