有一个表,编号 姓名 日期 薪水.日期是跨年的.
01 李四 2008-12-12 100
...查询名叫'张三'的员工在本年的总薪水,按月份显示.
01 李四 2008-12-12 100
...查询名叫'张三'的员工在本年的总薪水,按月份显示.
解决方案 »
- 更新临时表多字段重复的记录
- SQL按时间日期模糊查询的语句怎么写?
- 请问,MSSQLSERVER 和 SQLEXPRESS 有什么区别?感谢国家!谢谢!
- 大侠们救命啊, BCP如何导入只有1个字段的文本文件?
- 求一个查询的SQL语句或者是存储过程
- sql关联查询
- 这两个SQL语句哪个查询效率高??
- 有关调用实时(JIT)调试而不是此对话框的详细信息--安装sqlserver2008时的错误
- 如何让数据过1天后自动失效啊?
- 求一句SQL语句,请各位大哥帮忙想想。。
- 这一句错在哪里:SELECT name FROM sys.databases WHERE name = N'Test' ; Invalid object name 'sys.databases'.
- 有关2表查询的方法?
from tb
group by 姓名,convert(char(7),日期,120)
declare @StartTime datetime
set @StartTime='2003-12-05'
declare @EndTime datetime
set @EndTime='2004-02-28'
select * from #Birthday where dateadd(year,datediff(year,Birthday,@StartTime),Birthday)
between @StartTime and case when datediff(year,@StartTime,@EndTime)=0 then @EndTime else dateadd(year,datediff(year,'19001231',@StartTime),'19001231')
end or
dateadd(year,datediff(year,Birthday,@EndTime),Birthday) between case when datediff(year,@StartTime,@EndTime)=0 then @EndTime
else dateadd(year,datediff(year,'1900-01-01',@EndTime),'1900-01-01') end and @EndTime
http://topic.csdn.net/u/20090416/23/70fa19dd-76fe-4b3e-9caf-279de66ded8d.html
2月 2000元 这样的
sum(case when month(日期)=1 then 薪水 end) '1月份的薪水',
sum(case when month(日期)=2 then 薪水 end) '2月份的薪水',
sum(case when month(日期)=3 then 薪水 end) '3月份的薪水',
sum(case when month(日期)=4 then 薪水 end) '4月份的薪水',
sum(case when month(日期)=5 then 薪水 end) '5月份的薪水',
sum(case when month(日期)=6 then 薪水 end) '6月份的薪水',
sum(case when month(日期)=7 then 薪水 end) '7月份的薪水',
sum(case when month(日期)=8 then 薪水 end) '8月份的薪水',
sum(case when month(日期)=9 then 薪水 end) '9月份的薪水',
sum(case when month(日期)=10 then 薪水 end) '10月份的薪水',
sum(case when month(日期)=11 then 薪水 end) '11月份的薪水',
sum(case when month(日期)=12 then 薪水 end) '12月份的薪水'
from tb group by 姓名
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
select UserName,sum(case when Subject= '数学' then Score else 0 end) [数学],sum(case when Subject= '物理' then Score else 0 end) [物理],sum(case when Subject= '语文' then Score else 0 end) [语文]
declare @sql varchar(1000)
set @sql='select UserName'
select @sql=@sql+',sum(case when Subject= ''' +Subject+ ''' then Score else 0 end) ['+Subject+']' from (select distinct Subject from tb)aset @sql = @sql + ' from tb group by UserName'
print @sql
exec(@sql)
--讲解:--这个是第一次执行
select 姓名,max(case 课程 when '数学' then 分数 else 0 end) [数学],
--这个是第二次
select 姓名,max(case 课程 when '数学' then 分数 else 0 end) [数学], max(case 课程 when '物理' then 分数 else 0 end) [物理] ,
--这个是第三次
select 姓名,max(case 课程 when '数学' then 分数 else 0 end) [数学], max(case 课程 when '物理' then 分数 else 0 end) [物理] , max(case 课程 when '语文' then 分数 else 0 end) [语文]
--这个的数量来自于
(select distinct 课程 from tb)--这里只有3们课程create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
gocreate function dbo.f_str(@id int) returns varchar(100)
as
begin
declare @str varchar(1000)
set @str = ''
select @str = @str + ',' + cast(value as varchar) from tb where id = @id
set @str = right(@str , len(@str) - 1)
return @str
end
go--调用函数
select id , value = dbo.f_str(id) from tb group by iddrop function dbo.f_str
drop table tb
我只说一个地方
select @str = @str + ',' + cast(value as varchar) from tb where id = @id
你把这个看懂就明白了
例如当@id=1
select @str = @str + ',' + cast(value as varchar) from tb where id = 1
把满足id=1的str值通过','累加
当id是动态的就是1或者2...是当满足1的查询完了,把值付给str之后
在查询满足2的直到所有的ID完为止
这样明白了吧
select 姓名,sum(薪水) from 表 where 姓名='张三' and datepart(year,日期)=datepart(year,getdate())