日期:2014-05-19  浏览次数:20402 次

请问用sql怎样得到各部门的积分
有两个表info和unit
info里有id(int),unitid(string),unitname(string),point(int)等字段!
unit里有unitid(string),unitname(string)字段

我想得到一个统计积分的sql语句,但问题是info表的unitid中是由多个id由逗号连接的,想问问怎么写这个sql

具体是这样的
info

1     1,2       开发部,销售部                   4
2     1,4       开发部,人事部                   2
3     3,4,5   行政部,人事部,财务部     3
4     1,3       开发部,行政部                   1

unit

1     开发部
2     销售部
3     行政部
4     人事部
5     财务部

要得到的积分排行结果是

1     开发部     7
2     人事部     5
3     销售部     4
4     行政部     4
5     财务部     3

那位大哥有兴趣帮忙看看!sql我学的不是很好,客户要得也比较急!所以麻烦大家了!



------解决方案--------------------
create table info(id int,unitid varchar(50),unitcname varchar(50),jifen int)
go
insert info values(1, '1,2 ', '开发部,销售部 ',4)
insert info values(2, '1,4 ', '开发部,人事部 ',2)
insert info values(3, '3,4,5 ', '行政部,人事部,财务部 ',3)
insert info values(4, '1,3 ', '开发部,行政部 ',1)
go

create table unit(id int,cname varchar(20))
go
insert unit values(1, '开发部 ')
insert unit values(2, '销售部 ')
insert unit values(3, '行政部 ')
insert unit values(4, '人事部 ')
insert unit values(5, '财务部 ')
go

select id,cname,[积分结果]=(select sum(jifen) from info where charindex( ', '+ltrim(a.id)+ ', ', ', '+unitid+ ', ')> 0) from unit a
go

drop table info

drop table unit

--结果
id cname 积分结果
----------- -------------------- -----------
1 开发部 7
2 销售部 4
3 行政部 4
4 人事部 5
5 财务部 3

(所影响的行数为 5 行)
------解决方案--------------------
楼上的可以。

一种实现技巧。