Sql server 2008 基于sql server中的多个条件筛选表数据

Sql server 2008 基于sql server中的多个条件筛选表数据,sql-server-2008,Sql Server 2008,我有6个列表框和3个日期文本框,用于对数据库表应用条件筛选。 我需要的是,如果我只选择一个文本框或一个列表框值,或多个列表框值和多个日期值,我应该能够从前端仅基于选定的筛选条件检索数据。应该跳过我没有选择的日期或列表框值 我有以下查询,但它不工作。我应该如何编写查询 SELECT (MPMST.partyname + '' + ',' + '' + MPMST.contactperson) AS NAME ,(MPMST.email + '' + ',' + '' + MPMST.p

我有6个列表框和3个日期文本框,用于对数据库表应用条件筛选。 我需要的是,如果我只选择一个文本框或一个列表框值,或多个列表框值和多个日期值,我应该能够从前端仅基于选定的筛选条件检索数据。应该跳过我没有选择的日期或列表框值

我有以下查询,但它不工作。我应该如何编写查询

SELECT (MPMST.partyname + '' + ',' + '' + MPMST.contactperson) AS NAME
      ,(MPMST.email + '' + ',' + '' + MPMST.phone) AS ContactDetail
      ,MPMST.address
      ,(MPMST.city + '' + ',' + '' + MPMST.area) AS city_area
      ,MPMST.Already_Computer
      ,MPMST.software
      ,visit_time
      ,visit_purpose
      ,interaction
FROM    MPMST
INNER
JOIN    MCall   ON  MPMST.Partycode = MCall.Partycode
WHERE  MCall.calltype IN ('SUP001')
AND MPMST.area IN ('pavai')
AND MPMST.city  IN ('mumbai')
AND MCall.Date >= CONVERT(DATETIME ,'01/01/2014' ,103)
AND MCall.Date <= CONVERT(DATETIME ,'31/01/2014' ,103) MCall.status = ''
AND MPMST.software = ''
AND MPMST.Software <> ''
AND MPMST.City IS NOT NULL
AND MPMST.Area IS NOT NULL 
选择(MPMST.partyname++'++','++'+MPMST.contactperson)作为名称
,(MPMST.email++,'++'+MPMST.phone)作为联系人详细信息
,MPMST.address
,(MPMST.city+“”+“”,“+“”+MPMST.area)作为城市区域
,MPMST.已安装计算机
,MPMST.software
,参观时间
,探访目的
相互作用
来自MPMST
内部的
在MPMST.Partycode=MCall.Partycode上加入MCall
其中MCall.calltype输入('SUP001')
以及(‘pavai’)的MPMST.区域
以及位于(“孟买”的MPMST.city)
和MCall.Date>=转换(日期时间,'01/01/2014',103)

和MCall.Date如果我正确理解了您的问题,那么您的解决方案是: 首先,您应该创建存储过程,如:

Create Procedure MPMST_SELECT
(
@P_calltype varchar(200) = Null,
@P_area varchar(200) = Null,
@P_city varchar(200) = Null,
@P_MCallFromDate Date = Null,
@P_MCallToDate Date = Null,
@P_software varchar(200) = Null
)
AS
Begin
SELECT (MPMST.partyname + '' + ',' + '' + MPMST.contactperson) AS NAME
      ,(MPMST.email + '' + ',' + '' + MPMST.phone) AS ContactDetail
      ,MPMST.address
      ,(MPMST.city + '' + ',' + '' + MPMST.area) AS city_area
      ,MPMST.Already_Computer
      ,MPMST.software
      ,visit_time
      ,visit_purpose
      ,interaction
FROM    MPMST
INNER
JOIN    MCall   ON  MPMST.Partycode = MCall.Partycode
WHERE  MCall.calltype ISNUll(@P_calltype,MCall.calltype)
AND MPMST.area  = ISNUll(@P_area,MPMST.area)
AND MPMST.city  = ISNULL(@P_city,MPMST.city)
AND MCall.Date between ISNULL(@P_MCallFromDate, MCall.Date)and ISNULL(@P_MCallToDate,MCall.Date)
AND MPMST.software = ISNULL(@P_software,MPMST.software)
END
现在,您可以像这样运行此脚本:

MPMST_SELECT 'SUP001','pavai',Null,'01/01/2014','31/01/2014',Null

“它不工作”是什么意思?它没有给我正确的结果。我以前的查询是MCall.calltype IN('SUP001')或MPMST.area IN('pavai')或MPMST.city IN('孟买')的位置AND或MCall.status=''或MPMST.software=''和MPMST.software''以及MPMST.City不为NULL,MPMST.Area不为NULL..此查询只提供了满足第一个条件的记录,即..Sup001',因此请向我们显示您得到的结果,并解释为什么这些不是正确的结果-您期望得到什么?感谢您的解决方案,但我正在为calltype、area和city使用“IN”而不是“=”运算符..您可以在存储过程中为此使用动态查询,如:@P_calltype='SUP001、SUP002,SUP002'并在'('+ISNUll(@P_calltype,MCall.calltype)+')中使用类似:MCall.calltype