有一个表,编号   姓名       日期          薪水.日期是跨年的.
        01     李四      2008-12-12     100
        ...查询名叫'张三'的员工在本年的总薪水,按月份显示.

解决方案 »

  1.   

    select 姓名,sum(薪水)
    from tb
    group by 姓名,convert(char(7),日期,120)
      

  2.   

    --查询2003-12-05到2004-02-28之间的生日   
    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 
      

  3.   

    照着上面的这个写
    http://topic.csdn.net/u/20090416/23/70fa19dd-76fe-4b3e-9caf-279de66ded8d.html
      

  4.   

    http://blog.csdn.net/ws_hgo/archive/2009/02/12/3880475.aspx
      

  5.   

    select sum(薪水) from 有一个表 where 姓名='张三'
      

  6.   

    查询的是本年的,表的日期是跨年的,打个比方,就只要2008年的薪水总额,他那查询是总共的薪水吧,convert(char(7),日期,120) 这个是什么意思,把Date转换成字符型显示?我要的是月份显示,比如:1月    1000元
                                       2月    2000元  这样的
      

  7.   

    select 姓名,
    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 姓名
      

  8.   

    --动态的
    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完为止 
    这样明白了吧 
      

  9.   


    select 姓名,sum(薪水) from 表 where 姓名='张三' and datepart(year,日期)=datepart(year,getdate())