统计是按日统计的,最后有个总计功能,把这个月所有的都做个总计数据是类似这样的:日期       销量  价格
2012-01-01 100    5
2012-01-02 150    10
2012-01-03 175    20
2012-01-04 200    30查询出的表格是这样的:日期        销售额
2012-01-01   500
2012-01-02   1500
2012-01-03   3500
2012-01-04   6000
总计         11500能不能让数据库查询结果一次性就返回1~4号4天的结果和这4天的总计总不可能程序里面写个循环,然后里面一个个查吧..我晕死真的没啥思路了

解决方案 »

  1.   


    IF NOT OBJECT_ID('表') IS NULL
    DROP TABLE 表
    GO
    CREATE TABLE 表([日期] DATETIME,[销量] INT,[价格] INT)
    INSERT 表
    SELECT '2012-01-01',100,5 UNION ALL
    SELECT '2012-01-02',150,10 UNION ALL
    SELECT '2012-01-03',175,20 UNION ALL
    SELECT '2012-01-04',200,30
    GO
    SELECT CONVERT(VARCHAR(10),日期,120) AS 日期,销量*价格 AS 销售额 FROM 表
    UNION ALL
    SELECT '总计',SUM(销量*价格) AS 销售额 FROM 表
      

  2.   

    select convert(varchar(10),日期,120) 日期, 销量*价格 销售额 from tb where 日期 between '2012-01-01' and '2012-01-04' 
    union all
    select 日期 = '总计', sum(销量*价格) 销售额 from tb where 日期 between '2012-01-01' and '2012-01-04' 
      

  3.   

     
    -- 日期 销量 价格
    --2012-01-01 100 5
    --2012-01-02 150 10
    --2012-01-03 175 20
    --2012-01-04 200 30 if OBJECT_ID('tb') is not null
     drop table tb
      go 
       create table tb (日期 varchar(50),销量 int, 价格 int)
       insert into tb 
       select '2012-01-01',100,5 union all 
       select '2012-01-02',150,10 union all 
       select '2012-01-03',175,20 union all 
       select '2012-01-04',200,30  
     
     --查询出的表格是这样的:--日期      销售额
    --2012-01-01 500
    --2012-01-02 1500
    --2012-01-03 3500
    --2012-01-04 6000
    --总计 11500  select 日期,(销量*价格)as  销售额 from tb
      union all 
      select '总计',sum(销量*价格)as  销售额 from tb日期                                                 销售额
    -------------------------------------------------- -----------
    2012-01-01                                         500
    2012-01-02                                         1500
    2012-01-03                                         3500
    2012-01-04                                         6000
    总计                                                 11500(5 行受影响)
      

  4.   

    create table tb(日期 datetime , 销量 int,价格 int)
    insert into tb values('2012-01-01', 100 ,5)
    insert into tb values('2012-01-02', 150 ,10)
    insert into tb values('2012-01-03', 175 ,20)
    insert into tb values('2012-01-04', 200 ,30)
    goselect convert(varchar(10),日期,120) 日期, 销量*价格 销售额 from tb where 日期 between '2012-01-01' and '2012-01-04' 
    union all
    select 日期 = '总计', sum(销量*价格) 销售额 from tb where 日期 between '2012-01-01' and '2012-01-04' 
    drop table tb/*
    日期         销售额         
    ---------- ----------- 
    2012-01-01 500
    2012-01-02 1500
    2012-01-03 3500
    2012-01-04 6000
    总计         11500(所影响的行数为 5 行)
    */
      

  5.   

    select convert(varchar(10),日期,120) 日期, 销量*价格 as 销售额 from 表 where 日期 between '2012-01-01' and '2012-01-04'  
    union all
    select 日期 = '总计', sum(销量*价格) 销售额 from 表 where 日期 between '2012-01-01' and '2012-01-04'  
      

  6.   

    --> --> (Roy)生成測試數據
     
    if not object_id('Tempdb..#T') is null
    drop table #T
    Go
    Create table #T([日期] Datetime,[销量] int,[价格] int)
    Insert #T
    select '2012-01-01',100,5 union all
    select '2012-01-02',150,10 union all
    select '2012-01-03',175,20 union all
    select '2012-01-04',200,30
    Go
    Select
     [日期]=case when GROUPING(CONVERT(varchar(7),[日期],120))=1 then '总计' 
    else CONVERT(varchar(10),[日期],120)end,
     销售额=SUM([销量]*[价格])
    from #T
    group by CONVERT(varchar(7),[日期],120),[日期] with rollup 
    having GROUPING(CONVERT(varchar(7),[日期],120))=1 or GROUPING([日期])=0/*
    日期 销售额
    2012-01-01 500
    2012-01-02 1500
    2012-01-03 3500
    2012-01-04 6000
    总计 11500
    */
      

  7.   

    为什么我回复的不见了呢?? 
    -- 日期 销量 价格
    --2012-01-01 100 5
    --2012-01-02 150 10
    --2012-01-03 175 20
    --2012-01-04 200 30 if OBJECT_ID('tb') is not null
     drop table tb
      go 
       create table tb (日期 varchar(50),销量 int, 价格 int)
       insert into tb 
       select '2012-01-01',100,5 union all 
       select '2012-01-02',150,10 union all 
       select '2012-01-03',175,20 union all 
       select '2012-01-04',200,30  
     
     --查询出的表格是这样的:--日期      销售额
    --2012-01-01 500
    --2012-01-02 1500
    --2012-01-03 3500
    --2012-01-04 6000
    --总计 11500  select 日期,(销量*价格)as  销售额 from tb
      union all 
      select '总计',sum(销量*价格)as  销售额 from tb日期                                                 销售额
    -------------------------------------------------- -----------
    2012-01-01                                         500
    2012-01-02                                         1500
    2012-01-03                                         3500
    2012-01-04                                         6000
    总计                                                 11500(5 行受影响)
      

  8.   


    declare @t table (日期 datetime,销量 int,价格 int)
    insert into @t
    select '2012-01-01',100,5 union all
    select '2012-01-02',150,10 union all
    select '2012-01-03',175,20 union all
    select '2012-01-04',200,30select isnull(convert(varchar(10),日期,120),'总计') as 日期,
    sum(销量*价格) as 销售额 from @t group by 日期 with rollup
    /*
    日期         销售额
    ---------- -----------
    2012-01-01 500
    2012-01-02 1500
    2012-01-03 3500
    2012-01-04 6000
    总计         11500
    */
      

  9.   

    怪我没举个好例子,其实事实上时间都很多都是同一天的事实上字段还有很多,不过我把主要的字段列出来,其实这个就跟订单一样,什么时间订了一样什么东西
    每次订单就1件,不用考虑多件的问题日期               产地
    2012-01-01 0:05:35  CN
    2012-01-01 0:07:35  CN  
    2012-01-01 1:09:35  US
    2012-01-01 4:05:35  CN
    2012-01-02 0:06:35  US
    2012-01-02 0:07:35  US
    2012-01-03 5:07:43  CN 
    2012-01-03 0:06:35  US
    2012-01-04 6:02:52  US 
    ...要计算的是任何产地的量和产地是US的量
    返回:日期        All    US
    2012-01-01   4     1
    2012-01-02   2     2
    2012-01-03   2     1
    2012-01-04   1     1ALL就是不管是cn还是us都计算进去,us是只算us的本来想举个简单例子来让自己举一反三,但是日期这里不能一起啊时间不同无法group by先谢谢各位了
      

  10.   

    create table tb(日期 datetime , 产地 varchar(10))
    insert into tb values('2012-01-01 0:05:35', 'CN')
    insert into tb values('2012-01-01 0:07:35', 'CN')   
    insert into tb values('2012-01-01 1:09:35', 'US')
    insert into tb values('2012-01-01 4:05:35', 'CN')
    insert into tb values('2012-01-02 0:06:35', 'US')
    insert into tb values('2012-01-02 0:07:35', 'US')
    insert into tb values('2012-01-03 5:07:43', 'CN')
    insert into tb values('2012-01-03 0:06:35', 'US')
    insert into tb values('2012-01-04 6:02:52', 'US')  
    goselect convert(varchar(10),日期,120) 日期, 
           count(1) [All],
           sum(case when 产地 = 'US' then 1 else 0 end) [US],
           sum(case when 产地 = 'CN' then 1 else 0 end) [CN]
    from tb
    group by convert(varchar(10),日期,120)
    /*
    日期         All         US          CN          
    ---------- ----------- ----------- ----------- 
    2012-01-01 4           1           3
    2012-01-02 2           2           0
    2012-01-03 2           1           1
    2012-01-04 1           1           0(所影响的行数为 4 行)
    */
    select convert(varchar(10),日期,120) 日期, 
           count(1) [All],
           sum(case when 产地 = 'US' then 1 else 0 end) [US],
           sum(case when 产地 = 'CN' then 1 else 0 end) [CN]
    from tb
    group by convert(varchar(10),日期,120)
    union all
    select '合计' , 
           count(1) [All],
           sum(case when 产地 = 'US' then 1 else 0 end) [US],
           sum(case when 产地 = 'CN' then 1 else 0 end) [CN]
    from tb
    /*
    日期         All         US          CN          
    ---------- ----------- ----------- ----------- 
    2012-01-01 4           1           3
    2012-01-02 2           2           0
    2012-01-03 2           1           1
    2012-01-04 1           1           0
    合计         9           5           4(所影响的行数为 5 行)
    */drop table tb