公司一直用的是科力德的一卡通系统,由于数据越来越大,直接用科力德一卡通系统客户端查询数据异常慢,查一周的数据4774笔消费明细数据,需要1分30秒,查询一个月的不知道要多久(一直忙的状态),业务部门每月都要用消费数据做汇总,必须查询出来做汇总分析,如是经分析,了解了一卡通系统的数据结构,查询效率快得多,查一个月的数据3万多笔,也才3秒钟,现将查询代码分享给使用该系统的朋友们!
/***********************************************************
* Procedure description:查询消费明细
* Date: 2013-5-30
* Author:
*
* Changes
* Date Modified By Comments
************************************************************
exec Prg_FindXFData '20130501','20130530'
************************************************************/
Alter PROCEDURE dbo.Prg_FindXFData
(
@XFBegindate varchar(8),--消费开始日期
@XFEndDate varchar(8) ,--消费结束日期
@DevID tinyint=null, --机号
@MealType tinyint=null, --餐类:1=早餐,2=中餐,3=晚餐
@PersonCode varchar(20)=null,--卡编号
@CardID int=null, --卡流水号
@CardType tinyint=null, --卡类
@XFMoney float=Null --
)
AS
set NOCOUNT ON
declare @sqlstr nvarchar(max),@wherestr nvarchar(4000)
set @wherestr=''
if @DevID is not null
set @wherestr=@wherestr+' And C.DevID'+CAST(@DevID AS varchar(10))
if @MealType is not NULL
set @wherestr=@wherestr+' And C.MealTypeID='+cast(@MealType as varchar(10))
if isnull(@PersonCode,'')<>''
set @wherestr=@wherestr+' And D.EmpNo='''+@PersonCode+''''
if @CardID is not NULL
set @wherestr=@wherestr+' And C.CardID='+@CardID
if @CardType is not NULL
set @wherestr=@wherestr+' And C.CardTypeID'+@CardType
set @sqlstr='select C.DevID,c.XFPosDay,c.MealTypeID,E.MealTypeName,c.CardID,D.EmpNo,D.EmpName,c.CardTypeID,
b.OMoneyValue,b.CardMoneyValue,b.CardUseNum,c.XFPosDate
From XF_AccHead A inner join XF_AccTransDetail B on A.AccNo=B.AccNo
INNER JOIN XF_XFData c ON b.XFDataSysID=c.XFDataSysID
INNER JOIN RS_Emp D on A.EmpSysID=D.EmpSysID
inner join XF_MealType E on C.MealTypeID=E.MealTypeID
where C.XFPosDay>='''+convert(varchar(8),@XFBegindate,112)
+''' And C.XFPosDay<'''+convert(varchar(8),dateadd(day,1,@XFEndDate),112)+''''+@wherestr
+' order by C.CardID,C.XFPosDay'
exec (@sqlstr)