表1:Budget
ID        DateA            Handler          Content           Type                MoneyA
1         2012-4-25        黄太太           NUll              肉                  20.0000
2         2012-4-26        黄太太           NULL              肉                  20.0000    
3         2012-4-27        黄先生           NULL              电费                159.0000  
4         ...............(还有比较多的数据就不写了哈)
求在某时间段内(比如2012-4-25到2012-4-27),黄太太买肉用掉的钱总共是多少?
我用vc连接数据空的时候用的是下面的语句:(到这里程序就不能运行了,编译没有出错)strsql.Format(_T("select SUM(MoneyA) as SumMoneyA from Budget where (DateA>='%s' and DateA<='%s') and Type='%s'and Handler='%s'"),strDateFrom,strDateTo,strAnaType,strAnaHandler);
我是上面的sql错了吗?如果错了要怎么改哇?或者大侠直接写一条给我试试。。跪求 !!  拜谢!!!

解决方案 »

  1.   


    declare @begintime datetime
    declare @endtime datetimeselect sum(MoneyA) as SumMoneyA from budget where cast(DateA as datetime) between @begintime and @endtime
      

  2.   

    赋个值declare @begintime datetime
    declare @endtime datetime
    select @begintime='2012-4-25'
    select @endtime='2012-4-27'
    select sum(MoneyA) as SumMoneyA from budget where cast(DateA as datetime) between @begintime and @endtime
      

  3.   


    select SUM(MoneyA) as SumMoneyA 
      from Budget 
     where (DateA>='%s' and DateA<='%s') 
       and Type='%s'  --你的语句本身没大问题, 只是这里少了一个空格
       and Handler='%s'
      

  4.   

    select SUM(MoneyA) as SumMoneyA from Budget where (DateA>='%s' and DateA<='%s') and Type='%s'and Handler='%s'看Type='%s'and这里了没,真的少了。另外到数据库执行本句,变量替换成真实值,看有无报错。
      

  5.   

    declare @begintime datetime
    declare @endtime datetime
    declare @handler nvarchar(30)
    declare @type nvarchar(30)select @begintime='2012-4-25'
    select @endtime='2012-4-27'
    --比如查询姓黄先生,买肉
    select @handler='黄先生'
    select @type='肉'
    --精确查询
    select sum(MoneyA) as SumMoneyA from budget where cast(DateA as datetime) between @begintime and @endtime and Handler=@handler and type=@type--模糊查询select sum(MoneyA) as SumMoneyA from budget where cast(DateA as datetime) between @begintime and @endtime and Handler like '%'+@handler='%' and type like '%'+@type+'%'
      

  6.   

    错了个字符,修改下
    declare @begintime datetime
    declare @endtime datetime
    declare @handler nvarchar(30)
    declare @type nvarchar(30)select @begintime='2012-4-25'
    select @endtime='2012-4-27'
    --比如查询姓黄先生,买肉
    select @handler='黄先生'
    select @type='肉'
    --精确查询
    select sum(MoneyA) as SumMoneyA from budget where cast(DateA as datetime) between @begintime and @endtime and Handler=@handler and type=@type--模糊查询select sum(MoneyA) as SumMoneyA from budget where cast(DateA as datetime) between @begintime and @endtime and Handler like '%'+@handler+'%' and type like '%'+@type+'%'
      

  7.   

    问题解决了哈 ,不是少了个空格的问题。。我将sql弄到SQL 2005里面去执行,提示说TEXT和Vchar类型不能用求和所以我果断换了两个字段的类型,所以完成了。。哈哈。虽然问题不是你说的那样子,不过你提醒了我去SQL 2005执行了一下。ojz拜谢哈,大哥真心谢谢
      

  8.   

    insert into budget 
    select '2012-4-25','黄太太','肉',20 union all
    select '2012-4-26','黄太太','肉',20 union all
    select '2012-4-27','黄太太','肉',20 union all
    select '2012-4-28','黄太太','肉',20 union all
    select '2012-4-29','黄太太','肉',20 
    go
    select * from budget where datediff(day,'2012-4-25',datea)>=0 and datediff(day,'2012-4-27',datea)<=0 and handler='黄太太'
      

  9.   

    select SUM(MoneyA) as SumMoneyA 
    from Budget
    where DateA>=convert(varchar(10),'2012-04-25',120) and DateA<=convert(varchar(10),'2012-4-27',120)
    group by Handler