表信息:
公司名称      统计时间       金额         结算状态        税务  产品
公司A         2010年1月1号   20           已结算          1     A
公司A         2010年1月13号  40           已结算          3     B
公司A         2010年2月13号  40           已结算          3     B
公司A         2010年5月3号   50           未结算          4     A
公司B         2010年1月3号   10           已结算          3     C我想实现查询每个公司所有产品每个月的金额,比如A公司1月份总金额为60.以及所有公司的金额总计,已结算,未结算,税务
查询后的结果如下公司名称     月份   金额   结算状态
公司A         1      60     已结算
公司A         2      40     已结算
公司A         5      50     未结算
公司B         1      10     已结算
金额总计:160 已结算:110 未结算:50 税务:10
请问这条语句该怎么实现?

解决方案 »

  1.   


    SELECT 公司名称,CONVERT(VARCHAR(10),统计时间,120),结算状态,sum(金额)
    FROM TB 
    GROUP BY 公司名称,CONVERT(VARCHAR(10),统计时间,120),结算状态
      

  2.   


    时间错了。
    LEFT(统计时间,7)
      

  3.   

    create table tb(公司名称 varchar(20),统计时间 varchar(20),金额 int,结算状态 varchar(10),税务 int,产品 varchar(10))
    insert into tb values('公司A', '2010年1月1号'  ,20 ,'已结算', 1 ,'A')
    insert into tb values('公司A', '2010年1月13号' ,40 ,'已结算', 3 ,'B')
    insert into tb values('公司A', '2010年2月13号' ,40 ,'已结算', 3 ,'B')
    insert into tb values('公司A', '2010年5月3号'  ,50 ,'未结算', 4 ,'A')
    insert into tb values('公司B', '2010年1月3号'  ,10 ,'已结算', 3 ,'C')
    goselect 公司名称,
           convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120) 月份,
           sum(金额) 金额,
           结算状态
    from tb
    group by 公司名称,convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120),结算状态drop table tb/*
    公司名称                 月份      金额          结算状态       
    -------------------- ------- ----------- ---------- 
    公司A                  2010-01 60          已结算
    公司A                  2010-02 40          已结算
    公司A                  2010-05 50          未结算
    公司B                  2010-01 10          已结算(所影响的行数为 4 行)
    */
      

  4.   


    这种好像可以汇总得到,等高手来写
    我一般是用
    union all
    select '','',sum(金额),'已结算' from [xxx刚才那个] where 结算状态='已结算'
    union all
    select '','',sum(金额),'未结逄' from [xxx刚才那个] where 结算状态='未结算'也就是放入那个集合的最后两行
    可能把前面那个整成cte 
      

  5.   

    select 公司名称,
           convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120) 月份,
           sum(金额) 金额,
           结算状态
    from tb
    group by 公司名称,convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120),结算状态
      

  6.   

    引用乌龟的数据测试如下
    select 公司名称,

           convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120) 月份,
           结算状态,sum(金额) 金额,s1='',s2='',s3='',s4=''
    from #tb
    group by 公司名称,convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120),结算状态
    UNION ALL
    SELECT '金额总计',cast(sum(金额)as varchar),'已结算',sum(case when 结算状态='已结算' then 金额 else 0 end),
    '未结算',cast(sum(case when 结算状态='未结算' then 金额 else 0 end) as varchar),'税务',
    cast(sum(case when 结算状态='已结算' then 税务 else 0 end) as varchar)
     FROM #tb/**************  结果  *****************
    公司A 2010-01 已结算 60
    公司A 2010-02 已结算 40
    公司A 2010-05 未结算 50
    公司B 2010-01 已结算 10
    金额总计 160 已结算 110 未结算 50 税务 10
    ***********************************************/围观高手最优
      

  7.   


    select 公司名称 ,sum(金额) 金额,年月=convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120),结算状态
    from tb
    group by 公司名称,convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120),结算状态select '金额总计:',
    (select sum(金额)),
    '已结算',
    (select sum(金额) from tb where 结算状态='已结算'),
    '未结算',
    (select sum(金额) from tb where 结算状态='未结算'),
    '税务',
    (select sum(税务) from tb where 结算状态='已结算')
    from tb
    借4楼代码送LZ,