使用声明的Where子句Sum和内部连接更新SQL字段

时间:2017-10-10 17:05:04

标签: sql-server join sum sql-update

我正在尝试将此select语句转换为更新语句,该语句将采用'Sum(PRSummaryMain.Revenue)'并更新数据库'ClientCusttabfields.Cust12MonthRev'中的字段

我看到尝试的一切都失败了吗?

declare @Now int, @12Month int, @lastMonth int, @day int
set @DAY = DATEPART(dd,getdate())
set @Now = LEFT(CONVERT(varchar, GetDate(),112),6)
set @12Month = iif(@day<20, @Now -102, @now-101)
set @lastmonth = iif(@day<20,@Now - 2,@now-1)

    select cl.Client, cl.ClientID, cl.Name, @12Month as 'Period-12months', @lastMonth as 'Period-lastmonth',
SUM(PRSummaryMain.Revenue) as '12monthrev'

From PRSummaryMain
inner join PR on (PRSummaryMain.WBS1 = PR.WBS1 and PRSummaryMain.WBS2=PR.WBS2 and PRSummaryMain.WBS3=PR.WBS3)

inner join CL on  (PR.ClientID = CL.ClientID) 
inner join ClientCustomTabFields on (cl.ClientID = ClientCustomTabFields.ClientID)

Where  PRSummaryMain.WBS1 not like 'P%'and PRSummaryMain.WBS1 not like '%i%' and PRSummaryMain.Period >=@12Month and PRSummaryMain.period <=@lastMonth and ClientCustomTabFields.CustStrategicClient like 'y'

group by cl.Client, CL.clientid, cl.Name
order by cl.Name 

1 个答案:

答案 0 :(得分:0)

您可以尝试以下查询:

declare @Now int, @12Month int, @lastMonth int, @day int
set @DAY = DATEPART(dd,getdate())
set @Now = LEFT(CONVERT(varchar, GetDate(),112),6)
set @12Month = iif(@day<20, @Now -102, @now-101)
set @lastmonth = iif(@day<20,@Now - 2,@now-1)

select @Now , @12Month , @lastMonth , @day 

update c1
set Cust12MonthRev= SUM(PRSummaryMain.Revenue)
from
    ClientCustomTabFields c1 
inner join CL 
    on (cl.ClientID = c1.ClientID)
inner join PR 
    on  (PR.ClientID = CL.ClientID) 
inner join PRSummaryMain
    on (PRSummaryMain.WBS1 = PR.WBS1 and PRSummaryMain.WBS2=PR.WBS2 and PRSummaryMain.WBS3=PR.WBS3)
Where  
    PRSummaryMain.WBS1 not like 'P%'
    and PRSummaryMain.WBS1 not like '%i%' 
    and PRSummaryMain.Period >=@12Month 
    and PRSummaryMain.period <=@lastMonth 
    and c1.CustStrategicClient like 'y'
group by cl.Client, CL.clientid, cl.Name