更新语句中的TSQL聚合函数

时间:2014-02-12 07:57:32

标签: sql sql-server tsql

这是我的查询

UPDATE [P1_Log_FY14H1_CE]
  SET [P1_Log_FY14H1_CE].toplevelAccredCode = #PartnerLookupfinalForCode.Accreditation_Code
  FROM dbo.[P1_Log_FY14H1_CE]
  INNER JOIN #PartnerLookupfinalForCode
  ON [P1_Log_FY14H1_CE].[Partner ID] = #PartnerLookupfinalforCode.Partner_ID
  WHERE [P1_Log_FY14H1_CE].Intake_Date is not null and #PartnerLookupfinalforCode.[Rank]=(Select Min(Rank) from #PartnerLookupfinalforCode)

此处更新Toplevelaccredcode

我得到的结果是这样的

[Partner ID] Code     Rank
A             silver    3
A             LessSilver 4

此处在日志表中,合作伙伴A具有唯一记录。我希望在日志表中更新最高版本。 与合作伙伴一样,白银应该更新。  任何人都可以更正我的查询吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

WITH c AS (
    SELECT Partner_ID
    , Accreditation_Code
    , RANK() OVER(PARTITION BY Partner_ID ORDER BY [Rank]) [min_rank] 
    FROM #PartnerLookupfinalForCode)

UPDATE [P1_Log_FY14H1_CE]
SET [P1_Log_FY14H1_CE].toplevelAccredCode = c.Accreditation_Code
FROM dbo.[P1_Log_FY14H1_CE]
INNER JOIN c ON [P1_Log_FY14H1_CE].[Partner ID] = c.Partner_ID
    AND c.min_rank = 1
WHERE [P1_Log_FY14H1_CE].Intake_Date is not null 

答案 1 :(得分:0)

试试这个

UPDATE [P1_Log_FY14H1_CE]
  SET [P1_Log_FY14H1_CE].toplevelAccredCode = #PartnerLookupfinalForCode.Accreditation_Code
  FROM dbo.[P1_Log_FY14H1_CE]
  INNER JOIN #PartnerLookupfinalForCode
  ON [P1_Log_FY14H1_CE].[Partner ID] = #PartnerLookupfinalforCode.Partner_ID
  INNER JOIN (Select Partner_ID,Code,Min(Rank) from #PartnerLookupfinalforCode Group By Partner_ID,Code)   MINPartner
  ON MINPartner.Partner_ID =#PartnerLookupfinalforCode.Partner_ID AND MINPartner.Code=#PartnerLookupfinalforCode.Code
  WHERE [P1_Log_FY14H1_CE].Intake_Date is not null