我的SQL Server数据库中有多个表。
我有一个表Table A
,其中包含dispatch,filename,
等字段
第二个表格说Table B
有filedetails
等filename, 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]
答案 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]