分组后的Sql更新计数详细信息
我的SQL Server数据库中有多个表 我有一个表,比如分组后的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 [
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
);