• 分组计算数据的合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

  • 相关阅读:
    模拟死锁
    B站学习斯坦福大学Swift 语言教程 iOS11 开发【第一集】踩到的几个坑(XCode 13.2.1版本)
    数学之美番外篇:平凡而又神奇的贝叶斯方法
    joj 1753: Street Numbers
    二叉树的三种遍历(递归+非递归)
    joj 1905: Freckles
    joj 2630: A Pair of Graphs(同构图的判定)
    vue3.x 中获取dom元素
    defineProperty 和 Proxy 的区别
    vue 按钮的防抖和节流
  • 原文地址:https://www.cnblogs.com/wujy/p/2270917.html
Copyright © 2020-2023  润新知