我的意思如下:(先把这一完整的 sql 语句贴上)-------------------------------------------------------
SELECT  A.*,B.*FROM   Company_Info  A LEFT OUTER JOIN Company_Pub_Position  B
ON  A.Company_ID=B.Company_ID WHEREcase
when A.StartDate is  null or ( A.DealClerk='hasdel' or A.DealClerk is null )thencast(convert( varchar(10),dateadd( month,B.Pub_Position_ValidDate,B.Pub_Position_Date),120) as datetime) >=getdate()else  cast(A.EndDate as datetime)>=getdate()end------------------------------------------------------------我的意思如下:当满足以下这个条件时:when A.StartDate is  null or ( A.DealClerk='hasdel' or A.DealClerk is null )----------------------------我想这样筛选数据:thencast(convert( varchar(10),dateadd( month,B.Pub_Position_ValidDate,B.Pub_Position_Date),120) as datetime) >=getdate()----------------------------否则:就这样筛选数据else  cast(A.EndDate as datetime)>=getdate()
--------------------------------------------------------不知道我 这样拼接 sql 语句是否可以,但是现在这样写了,sql查询分析器提示第 10 行: '>' 附近有语法错误。就是这行:cast(convert( varchar(10),dateadd( month,B.Pub_Position_ValidDate,B.Pub_Position_Date),120) as datetime) >=getdate()而实际上这句话,单拿出来的话, sql 分析器是可以通过的,肯定我上面那个 sql 语句拼接上有错误,请各位老大帮帮忙,不胜感激!!

解决方案 »

  1.   

    SELECT  A.*,B.*FROM   Company_Info  A LEFT OUTER JOIN Company_Pub_Position  B
    ON  A.Company_ID=B.Company_ID 
    where 
    ( A.StartDate is  null or ( A.DealClerk='hasdel' or A.DealClerk is null ) and cast(convert( varchar(10),dateadd( month,B.Pub_Position_ValidDate,B.Pub_Position_Date),120) as datetime) >=getdate()) or   --这里其实就是case 的作用
     ( A.StartDate is not null and ( A.DealClerk<>'hasdel' and A.DealClerk is not null ) and cast(A.EndDate as datetime)>=getdate() )--试试
      

  2.   

    是这句的问题了 
    你换过来就可以了 A.StartDate is  null or ( A.DealClerk='hasdel' or A.DealClerk is null )
      

  3.   

    不懂啊,没用过case when放在where后面
      

  4.   

    xiaoku(野蛮人(^v^)) 你的方法  sql 查询器是通过了,不过,为什么没有 casa when 呢,我实际看一下是不是我想的的结果集!!
      

  5.   

    SELECT A.*,B.*
    FROM
     Company_Info  A LEFT OUTER JOIN Company_Pub_Position  B
    ON
     A.Company_ID=B.Company_ID WHERE(A.StartDate is  null or ( A.DealClerk='hasdel' or A.DealClerk is null )
    and
    cast(convert( varchar(10),dateadd( month,B.Pub_Position_ValidDate,B.Pub_Position_Date),120) as datetime) >=getdate())
    or
    (A.StartDate is  not null and ( A.DealClerk<>'hasdel' and  A.DealClerk is not null )
    and   cast(A.EndDate as datetime)>=getdate())
    xiaohu的貌似可以了~~
      

  6.   


    xiaoku(野蛮人(^v^)) 明白你的意思了,就是分成两种情况,然后,用 or 链接,最终是可以解决,记录集是正确的,不过,我有点不解,难道用 case when 不能解决吗?谢谢你的指点,多谢了
      

  7.   

    caixia615你们俩的效果是一样的谢谢!
      

  8.   

    (A.StartDate is  null or ( A.DealClerk='hasdel' or A.DealClerk is null )
    and
    cast(convert( varchar(10),dateadd( month,B.Pub_Position_ValidDate,B.Pub_Position_Date),120) as datetime) >=getdate())
    象这两个条件是并列条件,不是存在条件,两条件是并列关系不好用case when貌似
      

  9.   

    SELECT  A.*,B.*FROM   Company_Info  A LEFT OUTER JOIN Company_Pub_Position  B
    ON  A.Company_ID=B.Company_ID WHERE(case
    when A.StartDate is  null or ( A.DealClerk='hasdel' or A.DealClerk is null )thencast(convert( varchar(10),dateadd( month,B.Pub_Position_ValidDate,B.Pub_Position_Date),120) as datetime)else  cast(A.EndDate as datetime)end)>=getdate()
      

  10.   

    SELECT A.*,B.*
    FROM Company_Info  A 
    LEFT OUTER JOIN Company_Pub_Position  B ON A.Company_ID=B.Company_ID 
    WHERE
    A.StartDate is  null or ( A.DealClerk='hasdel' or A.DealClerk is null )
    AND cast(convert( varchar(10),dateadd( month,B.Pub_Position_ValidDate,B.Pub_Position_Date),120) as datetime) >=getdate()union allSELECT A.*,B.*
    FROM Company_Info  A 
    LEFT OUTER JOIN Company_Pub_Position  B ON A.Company_ID=B.Company_ID 
    WHERE
    A.StartDate is  not null or ( A.DealClerk<>'hasdel' or A.DealClerk is  not null )
    AND cast(A.EndDate as datetime)>=getdate()
      

  11.   

    不一定要用case when 判斷
      

  12.   

    CASE when 好像不能同时多条件.