2016-02-04 22 views
0

我有了这个查询返回的ID列表和INT值的值更新新从一个单独的查询

SELECT 
Opportunity.opportunityid 
,obn.cnt 
FROM Opportunity 
LEFT JOIN Account 
ON Opportunity.AccountId = Account.AccountId 
OUTER APPLY 
(SELECT 
    COUNT(dst) AS cnt 
FROM [server].[telecoms].[dbo].[vwOpportunityUpdate] 
WHERE dst COLLATE DATABASE_DEFAULT = REPLACE(Account.Telephone1,' ','') COLLATE DATABASE_DEFAULT 
AND calldate > opportunity.createdon 
GROUP BY dst) obn 
WHERE DATEDIFF(dd,Opportunity.CreatedOn,GETDATE()) < 30 
AND obn.cnt IS NOT NULL 

所有我需要做的就是更新这些结果

基于该值的表
UPDATE Opportunity SET callcount = (obn.count from previous query) 
WHERE OpportunityId = OpportunityId 

我不知道如何将这两件事结合在一起。

感谢

回答

1

保存第一查询的结果到一个临时表中,然后使用该表加入的其他表中的UPDATE子句。

SELECT 
Opportunity.opportunityid 
,obn.cnt as cnt 
INTO #CallCounts 
FROM Opportunity 
LEFT JOIN Account 
ON Opportunity.AccountId = Account.AccountId 
OUTER APPLY 
(SELECT 
    COUNT(dst) AS cnt 
FROM [server].[telecoms].[dbo].[vwOpportunityUpdate] 
WHERE dst COLLATE DATABASE_DEFAULT = REPLACE(Account.Telephone1,' ','') COLLATE DATABASE_DEFAULT 
AND calldate > opportunity.createdon 
GROUP BY dst) obn 
WHERE DATEDIFF(dd,Opportunity.CreatedOn,GETDATE()) < 30 
AND obn.cnt IS NOT NULL 

UPDATE o 
SET callcount = c.cnt 
FROM Opportunity o 
JOIN #CallCounts c on c.opportunityID = o.opportunityID 

DROP TABLE #CallCounts