计算sql中的票号

时间:2017-03-15 17:17:30

标签: sql-server

我想要做的只是显示为某个客户创建的记录,该客户在某个月内只有一个以上的票号。

Select name,ticketnumber, title,
description,statename,personname,charge,createdon
from case
Where sum(ticketnumber) > 2 AND createdon >= '2017-01-01' ;

我试过了

select sum(ticketnumber) AS total

where sum(ticketnumber) > 2

我哪里错了? ticketnumbervarchar数据类型

错误即将到来;

Operand data type nvarchar is invalid for sum operator.

2 个答案:

答案 0 :(得分:1)

要将支票限制为一个月,而不仅仅是在某个日期之后,您可以使用dateadd(month, datediff(month, 0, createdon ) , 0)将日期截断到一个月的第一天。

假设您通过personname识别您的客户:

使用exists()

select 
    name
  , ticketnumber
  , title
  , description
  , statename
  , personname
  , charge
  , createdon
from [case] as c
where dateadd(month, datediff(month, 0, createdon )  , 0) = '20170101'
  and exists (
  select 1
  from [case] as i
  where --createdon >= '2017-01-01'
    dateadd(month, datediff(month, 0, createdon )  , 0) = '20170101'
    and i.personname = c.personname
  having count(*) > 1
  )

使用in()

select 
    name
  , ticketnumber
  , title
  , description
  , statename
  , personname
  , charge
  , createdon
from [case]
where dateadd(month, datediff(month, 0, createdon )  , 0) = '20170101'
  and personname in (
  select personname
  from [case] as i
  where --createdon >= '2017-01-01'
    dateadd(month, datediff(month, 0, createdon )  , 0) = '20170101'
  group by personname
  having count(*) > 1
  )

答案 1 :(得分:0)

我通常只是这样做

ini_set('error_prepend_string',"<div class='error'>")  ;
ini_set('error_append_string',"</div>")  ;
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);