create table test
(
Pid int identity not null primary key,
Years datetime,
IsIsFirstSixMonths int default(0), --0表示上半年1表示下半年--
TotalCome int,
TotalOut int
)
假设表里有5条数据select * from test结果如下:
Pid      Years     IsIsFirstSixMonths     TotalCome
1       2007-1-1         0                    50 
2       2007-3-1         0                    60
3       2007-12-1        1                    80
4       2008-1-1         0                   100
5       2008-12-1        0                   100
IsIsFirstSixMonths表段 0表示上半年1表示下半年
我想要的结果是:2007上半年的TotalCome相加的和(说明:SUM,值应该是110)
               2007下半年的TotalCome相加的和(说明:SUM,值应该是80))
               2008上半年的TotalCome相加的和(说明:SUM,值应该是100)
               2008下半年的TotalCome相加的和(说明:SUM,值应该是100)

解决方案 »

  1.   

    select Years,IsIsFirstSixMonths,sum(TotalCome) as TotalCome from test group by Years,IsIsFirstSixMonths
      

  2.   

    select substring(Years,1,4) as year,IsIsFirstSixMonths,sum(TotalCome) as TotalCome from test group by substring(Years,1,4),IsIsFirstSixMonths
      

  3.   

    不好意思,没有注意到你的years是datetime类型,应该这样写select convert(varchar(4), Years,20) as year,IsIsFirstSixMonths,sum(TotalCome) as TotalCome from test group by convert(varchar(4), Years,20),IsIsFirstSixMonths
      

  4.   


    select year(years),sum(totalcome) from test group by year(Years),IsIsFirstSixMonths order by year(years)楼上的要对years进行一个排序
      

  5.   

    --create database dbTemp
    use dbTemp
    create table test
    (
    Pid int identity(1,1) not null primary key,
    Years datetime,
    IsFirstSixMonths int default(0), --0表示上半年1表示下半年--
    TotalCome int

    insert test 
    select '2007-1-1',0,50
    union 
    select '2007-3-1',0,60
    union
    select '2007-12-1',1,80
    union 
    select  '2008-1-1',0,100
    union
    select  '2008-12-1',1,100select * from testselect convert(char(4),Years,120) as 'year',
    IsFirstSixMonths=case when IsFirstSixMonths=0 then '上半年' when IsFirstSixMonths=1 then '下半年' END ,
    sum(totalcome) as 'sum' from test 
    group by IsFirstSixMonths,convert(char(4),Years,120)或者
    select convert(char(4),Years,120) as 'year',
    IsFirstSixMonths=case when IsFirstSixMonths=0 then '上半年' ELSE '下半年' END ,
    sum(totalcome) as 'sum' from test 
    group by IsFirstSixMonths,convert(char(4),Years,120)--DROP DATABASE dbtemp
      

  6.   

    根据 年份 group by 一下 
    然后 SUM