+ -
当前位置:首页 → 问答吧 → 求SQL语句怎么写

求SQL语句怎么写

时间:2011-12-01

来源:互联网

一张单位表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分)
)

作者: xiaozhang1528008   发布时间: 2011-12-01

SQL code
select a.name,sum(case when b.num = 1 then 1 when b.num = 2 then 3 else 0 end)
   + sum(case when b.Point= 1 then 1 when b.Point= 2 then 3 else 0 end)
   + sum(1) as 得分
from unit a,info b
where b.unitid = a.id
group by a.name

作者: Haiwer   发布时间: 2011-12-01

可能不得分的也要显示

SQL code
select a.name,sum(case when b.num = 1 then 1 when b.num = 2 then 3 else 0 end)
   + sum(case when b.Point= 1 then 1 when b.Point= 2 then 3 else 0 end)
   + sum(case when b.unitid is not null then 1 else 0 end) as 得分
from unit a left join info b
on b.unitid = a.id
group by a.name

作者: Haiwer   发布时间: 2011-12-01

SQL code
select
 a.name,
 sum(case when b.num = 1 then 1 when b.num = 2 then 3 else 0 end)
   + 
 sum(case when b.Point= 1 then 1 when b.Point= 2 then 3 else 0 end)
   + 
 sum(case when b.unitid is not null then 1 else 0 end) as 得分
from
 unit a left join info b
on
 b.unitid = a.id
group by
 a.name

作者: fredrickhu   发布时间: 2011-12-01