日期:2014-05-20  浏览次数:20741 次

求一条简单的sql语句
从一个表中求和
表结构如下,,

id,type,point,staff_id,checkdate
1, '公共内容 ',5, '0000 ', '2007-1-1 '
2, '业务内容 ',4, '0000 ', '2007-1-1 '
3, '业务内容 ',2, '0000 ', '2007-1-2 '
4, '公共科目 ',2, '0000 ', '2007-1-3 '

求得结果如下

staff_id,公共内容,业务内容,公共科目,业务科目,领导加分
'0000 ',5,6,2,0,0
得有条件   checkdate   > =2007-1-1   <2007-1-7

除了用full   outer   join   还有什么列简单的语句不,,

不能用游标和临时表


------解决方案--------------------
select staff_id,case type when '公共内容 ' then sum(point) else 0 end ,case type when '业务内容 ' then sum(point) esle 0 end ......
from table
group by staff_id
------解决方案--------------------
用嵌套

Some Code To Sum where id in (select id form XX表 where checkdate > =2007-1-1 <2007-1-7)

其实还是临时表,不过这张表是记录在内存里的

凑合着吧
------解决方案--------------------
--如果“公共内容,业务内容,公共科目,业务科目,领导加分”這幾列是固定的,可以只用一條SQL語句,否則就要用動態SQL語句

Select
staff_id,
SUM(Case type When N '公共内容 ' Then point Else 0 End) As 公共内容,
SUM(Case type When N '业务内容 ' Then point Else 0 End) As 业务内容,
SUM(Case type When N '公共科目 ' Then point Else 0 End) As 公共科目,
SUM(Case type When N '业务科目 ' Then point Else 0 End) As 业务科目,
SUM(Case type When N '领导加分 ' Then point Else 0 End) As 领导加分
From
TableName
Where checkdate > = '2007-1-1 ' And checkdate < '2007-1-7 '
Group By staff_id




------解决方案--------------------
顶..
------解决方案--------------------
create table TA (id int ,type char(10),point int ,staff_id char(5) ,checkdate datetime )

--插入测试数据

insert into TA (id,type,point,staff_id,checkdate)
select 1, '公共内容 ',5, '0000 ', '2007-1-1 ' union
select 2, '业务内容 ',4, '0000 ', '2007-1-1 ' union
select 3, '业务内容 ',2, '0000 ', '2007-1-2 ' union
select 4, '公共科目 ',2, '0000 ', '2007-1-3 ' union
select 5, '业务科目 ',0, '0000 ', '2007-1-2 ' union
select 6, '领导加分 ',0, '0000 ', '2007-1-3 '


declare @str varchar(8000)
set @str= 'select staff_id , '
select @str=@str+quotename(rtrim(type))+ '=sum(case when type= ' ' '+rtrim(type)+ ' ' ' then point else 0 end), '
from ta group by type order by type
select @str=left(@str, len(@str)-1) ,@str=@str+ ' from tA where checkdate > = '+ ' ' '2007-1-1 ' ' ' + 'and checkdate < '+ ' ' '2007-1-7 ' ' '+ 'group by staff_id order by staff_id '
exec(@str)

不知道是否是你要的结果?
------解决方案--------------------
帮你顶!