要给客户做一个前台页面,显示出最近半年的销售额和点击量.要求是当前月份排名第一,降序排列最近半年的月份.就像这种
月份          点击         销售       支票号码
-----------------------------------------------
2009-12       12343        23232.92      29222009-11       12343        23232.22      29212009-10
.
.
.
2009-07       12131         232323.23     2901点击量方面,我就用一个表IPRecord记录的,点击时间是用datatime类型,
销售方面,我用一个INVOICE表记录,有销售完的时间(字符型),金额(字符型),客户账号.
支票这边我还没想好用什么做,老板是要求他要每一个月写和这个月的销售额相等的支票,要做一个可以输入支票号码的页.如果做总体的统计我可以用SQL来统计,可是这种分月份显示的要怎么做得好?
我原来是想再建一个表,是分月记录的这一切,然后每次销售完成后就判断一下当前时间, 再和表里的时候做对比,没有就新加一条,如果有的话,就取出来再update一下.显示时用gridview绑定单张表就可以了.但这种好像对数据库存取次数太多了,不是那么高效.而且很麻烦.所以上来问问大家,有没有什么别的方法,可以完成这种功能?

解决方案 »

  1.   

    group by
    sum max min count
    order by
    这些东西的组合
      

  2.   

    还是group by 
    sum max min count 
    order by 
    这些东西的组合这里需要月份的话还有,时间日期函数,什么datediff之类的东东
    这里按月的话,应该用到
    datediff 
    --返回跨两个指定日期的日期和时间边界数。
       select datediff(month,'2009-09-01','2009-12-18')   --返回:3
    datepart 
    --返回代表指定日期的指定日期部分的整数。
    SELECT DATEPART(month, '2009-10-15') --返回 10
      

  3.   

    能不能写出比较完整的SQL语句?还有,金额是string,类型的,不可以用sum()啊。
      

  4.   

    你说的这些我不太明白,能不能写出完整的SQL语句。而且,如何弄分月显示啊并配合月份,一点头绪都没有
      

  5.   

    create table #tb1(IP nvarchar(20),Click_Time datetime,UserName nvarchar(20))
    insert into #tb1
    select '10.110.112.119',convert(datetime,'2009-03-21'),'路人甲' union all
    select '10.110.119.112',convert(datetime,'2009-07-02'),'路人乙' union all
    select '10.112.110.119',convert(datetime,'2009-07-15'),'路人丙' union all
    select '10.112.119.110',convert(datetime,'2009-08-19'),'路人丁' union all
    select '10.119.110.112',convert(datetime,'2009-08-30'),'路人戊' union all
    select '10.119.112.110',convert(datetime,'2009-09-01'),'路人己' union all
    select '10.114.110.119',convert(datetime,'2009-10-28'),'路人庚' union all
    select '10.114.112.119',convert(datetime,'2009-11-12'),'路人辛' union all
    select '10.114.110.112',convert(datetime,'2009-12-07'),'路人壬'--select * from #tb1
    --IP                   Click_Time              UserName
    ---------------------- ----------------------- --------------------
    --10.110.112.119       2009-03-21 00:00:00.000 路人甲
    --10.110.119.112       2009-07-02 00:00:00.000 路人乙
    --10.112.110.119       2009-07-15 00:00:00.000 路人丙
    --10.112.119.110       2009-08-19 00:00:00.000 路人丁
    --10.119.110.112       2009-08-30 00:00:00.000 路人戊
    --10.119.112.110       2009-09-01 00:00:00.000 路人己
    --10.114.110.119       2009-10-28 00:00:00.000 路人庚
    --10.114.112.119       2009-11-12 00:00:00.000 路人辛
    --10.114.110.112       2009-12-07 00:00:00.000 路人壬create table #tb2(BusinessTime nvarchar(20),BusinessMoney nvarchar(20),userName nvarchar(20))
    insert into #tb2
    select '2009-03-21','21.45','路人A' union all
    select '2009-07-02','67.02','路人B' union all
    select '2009-08-19','345.56','路人C' union all
    select '2009-08-30','93.73','路人D' union all
    select '2009-10-28','48.95','路人E' union all
    select '2009-11-12','826.23','路人F'--select * from #tb2
    --BusinessTime         BusinessMoney        userName
    ---------------------- -------------------- --------------------
    --2009-03-21           21.45                路人A
    --2009-07-02           67.02                路人B
    --2009-08-19           345.56               路人C
    --2009-08-30           93.73                路人D
    --2009-10-28           48.95                路人E
    --2009-11-12           826.23               路人F
    --
    --(6 個資料列受到影響)select C.StandTime,D.Click_Num,E.BusinessTotalMoney
        from
        (
            select convert(nvarchar(7),getdate(),120) as StandTime union
            select convert(nvarchar(7),dateadd(mm,-1,getdate()),120) union
            select convert(nvarchar(7),dateadd(mm,-2,getdate()),120) union
            select convert(nvarchar(7),dateadd(mm,-3,getdate()),120) union
            select convert(nvarchar(7),dateadd(mm,-4,getdate()),120) union
            select convert(nvarchar(7),dateadd(mm,-5,getdate()),120)
        )C
        left join
        (
            select A.Click_Time,sum(Ip) as Click_Num
                from
                (
                    select convert(nvarchar(7),Click_Time,120) as Click_Time,1 as Ip 
                        from #tb1
                        where datediff(m,Click_Time,getdate())<6
                )A
                group by A.Click_Time
        )D 
        on C.StandTime=D.Click_Time
        left join
        (
            select B.BusinessTime,sum(B.BusinessMoney) as BusinessTotalMoney
                from
                (
                    select convert(nvarchar(7),BusinessTime,120) as BusinessTime,convert(float,BusinessMoney) as BusinessMoney
                        from #tb2
                        where datediff(m,convert(datetime,BusinessTime),getdate())<6
                )B group by B.BusinessTime
        )E
        on C.StandTime=E.BusinessTime--StandTime Click_Num   BusinessTotalMoney
    ----------- ----------- ----------------------
    --2009-07   2           67.02
    --2009-08   2           439.29
    --2009-09   1           NULL
    --2009-10   1           48.95
    --2009-11   1           826.23
    --2009-12   1           NULL
    --
    --(6 個資料列受到影響)
      

  6.   

    建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试。