分组计算数据的合MSSQL

一张单位表Unit:

  ID Name
  1 中石油

  2 中移动

  3 电信

另一张表Info:

  ID UnitID Num Point
  1 1 1 2
  2 1 2 1
  3 2 1 1
  4 3 2 2

若Num=1时 得1分 若Num=2时 得3分
若Point=1时 得1分 若Point=2 得3分
还有在info表中有单位纪录一条得1分


希望得到的表如下

Name 得分
中石油 10
中移动 3
电信 7


例举第一条10分的计算(计算方式(在Info表UnitID为1时有两条加2分,其中Num一个为1一个为2所以加4分,Point一个为2一个为1所以再加4分,总为10分)
)

 

select a.name,sum(casewhen b.num =1then1when b.num =2then3else0end)
  
+sum(casewhen b.Point=1then1when b.Point=2then3else0end)
  
+sum(casewhen b.unitid isnotnullthen1else0end) as 得分
from unit a left  join info b
on b.unitid = a.id
groupby a.name

 

 

LEFT JOIN ***  ON  *** WHERE

 

 

 

运用:

 

select top 1 @ReX=ReX,@ReY=ReY,@ReJ=ReJ,@TypeX=TypeX,@TypeM=TypeM,@TypeO=TypeO,@StateQ=StateQ,@StateJ=StateJ,@CaseNum=CaseNum FROM T_AssessPoint
   
 if(@time1=null or @time1='' )
  select a.UnitName,sum(case when b.CaseCheckID = 1 then @ReX when b.CaseCheckID = 2 then @ReY when b.CaseCheckID=3 then @ReJ else 0 end)
        + sum(case when b.CaseTypeID= 1 then @TypeM when b.CaseTypeID= 2 then @TypeX when b.CaseTypeID=3 then @TypeO else 0 end)
        +sum(case when b.CaseStatus=1 then @StateQ when b.CaseStatus=2 then @StateJ else 0 end)
        + sum(case when b.unitid is not null then @CaseNum else 0 end) as Number
        from T_Unit a left join T_Case b
        on b.unitid = a.id where a.ID in (select * from dbo.splitstr(@UnitID,','))
        group by a.UnitName order by Number desc

posted @   踏浪帅  阅读(245)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示