declare @0 varchar(20),@1 varchar(20) ,@daima varchar(20),@mingcheng varchar(20) select @0='2008-04-26',@1='2008-05-25',@daima='',@mingcheng='' select   isnull(a.客户或供应商代码, b.客户或供应商代码) as'客户或供应商代码' ,isnull(a.客户或供应商名称,b.客户或供应商名称) as'客户或供应商名称' ,isnull((a.凭证总计-b.凭证总计),isnull(a.凭证总计,b.凭证总计)) as'凭证总计' from (SELECT  T0.CardCode AS '客户或供应商代码', T0.CardName AS '客户或供应商名称', SUM(T0.DocTotal)  AS '凭证总计' 
FROM  [dbo].[OPDN] T0 
where (T0.DOCDATE>=@0  AND  T0.DOCDATE <=@1 )  or (T0.CardCode  LIKE  @daima and T0.CardName  LIKE  @mingcheng) GROUP BY T0.CardCode,T0.CardName) a full join (SELECT  T0.CardCode AS '客户或供应商代码', T0.CardName AS '客户或供应商名称', SUM(T0.DocTotal)  AS '凭证总计' FROM  [dbo].[ORPD] T0 where (T0.DOCDATE>=@0  AND  T0.DOCDATE <=@1)  or (T0.CardCode  LIKE  @daima and T0.CardName  LIKE  @mingcheng) GROUP BY T0.CardCode,T0.CardName)b on a.客户或供应商代码=b.客户或供应商代码 
诸位帮我看看  我写的这个语句  怎么@daima  @mingcheng 这两个变量不起作用  也就是说我在运行这个语句时  前三个变量依次填上 时间1  时间2  daima;显示出的结果跟只填写时间1 时间2 的结果是一样的  也就是说  第三、四个变量 没有起到应起的作用  问题应该出在判断条件这,但是我应该如何修改呢  急!!!看or 条件设置对不对  应该怎么修改 ? 这个思路应该不会有错  大家帮我详细看看

解决方案 »

  1.   

    不起作用的原因是,(...) OR (...) ,已经满足 OR前边的:
    (T0.DOCDATE>=@0  AND  T0.DOCDATE <=@1) OR之后的条件不管满足不满足,都会返回行记录。
    (T0.DOCDATE>=@0  AND  T0.DOCDATE <=@1)  or (T0.CardCode  LIKE  @daima and T0.CardName  LIKE  @mingcheng) 
      

  2.   

    你赋了初值 @daima='',@mingcheng=''
    之后 (T0.CardCode  LIKE  @daima and T0.CardName  LIKE  @mingcheng) 
    相当于 (T0.CardCode  LIKE  '' and T0.CardName  LIKE  '') 这样不会有满足条件的
    所以只筛选满足  (T0.DOCDATE>=@0  AND  T0.DOCDATE <=@1) 的记录