(CASE WHEN LEFT(telephone1, 3) = '131%' 
 THEN telephone1 AS L 
ELSE (CASE WHEN LEFT(telephone2, 3) = '131%' 
      THEN telephone2 AS L
      ELSE (CASE WHEN LEN(telephone2) = 11
            THEN telephone2 AS Y
            ELSE telephone1 AS Y
            END)
      eND)
END)
高手帮忙看看怎么改
是不是AS 用的不对如果用if  else 怎么写啊

解决方案 »

  1.   

    (CASE WHEN LEFT(telephone1, 3) = '131%'  
     THEN telephone1  
    ELSE  WHEN LEFT(telephone2, 3) = '131%'  
      THEN telephone2  
      ELSE  WHEN LEN(telephone2) = 11
      THEN telephone2
      ELSE telephone1    END)y
    如果你要分两个字段的话就分两个CASE WHEN 判断
      

  2.   

    你到底要显示几个列?
    如果是多列
    就分别用几个case when end
    如果是单列
    将别名放外面
    if else去掉
      

  3.   

    (CASE WHEN LEFT(telephone1, 3) = '131%'  
     THEN telephone1   
    ELSE (CASE WHEN LEFT(telephone2, 3) = '131%'  
      THEN telephone2 
      ELSE (CASE WHEN LEN(telephone2) = 11
      THEN telephone2
      ELSE telephone1
      END)
      eND)
    END) AS L
      

  4.   

    (
        CASE 
             WHEN LEFT(telephone1, 3)='131' THEN telephone1 
             ELSE (
                      CASE 
                           WHEN LEFT(telephone2, 3)='131' THEN telephone2 
                           ELSE (
                                    CASE 
                                         WHEN LEN(telephone2)=11 THEN telephone2 
                                         ELSE telephone1 
                                    END
                                )
                      END
                  )
        END
    )不需要AS
      

  5.   

    再次提醒:
    IF ... ELSE ...是控制流语句,跟其他编程语言类似。
    CASE ... WHEN ... END是表达式,用来按条件返回一个结果,不是语句。类似于VB中的Choose/Switch函数,而不是C/C++/C#中的SWITCH语句。
      

  6.   

    最后一个end没有as L
    你的逻辑有点乱.
      

  7.   

    SELECT BaseData2010.dbo.Guest.guest_no, SUM(OweCharge201006.charge) AS 金额, 
    MIN(OweCharge201006.take_month) AS 首次, MAX(OweCharge201006.take_month) AS 末次, 
    BaseData2010.dbo.Guest.guest_name, 
        BaseData2010.dbo.Guest.addr, (
               CASE 
                    WHEN LEFT(telephone1, 3)='131' OR LEFT(telephone2, 3)='131' THEN 'L'
                    ELSE 'Y'
               END
           ) 
    FROM BaseData2010.dbo.Guest
    INNER JOIN OweCharge201006
    ON  OweCharge201006.guest_no = BaseData2010.dbo.Guest.guest_no
        AND OweCharge201006.class98_no = 1
        AND (
                LEN(BaseData2010.dbo.Guest.telephone1)=11
                OR LEN(BaseData2010.dbo.Guest.telephone2)=11
            )
        AND OweCharge201006.write_no = 0
    GROUP BY BaseData2010.dbo.Guest.guest_no, BaseData2010.dbo.Guest.guest_name, BaseData2010.dbo.Guest.addr, 
          BaseData2010.dbo.Guest.telephone1, BaseData2010.dbo.Guest.telephone2
    HAVING COUNT(1)>=2?
      

  8.   

    ,case when telephone1 like '131%' or telephone2 like '131%' then coalesce(telephone1,telephone2) end L,
    case when telephone1 not like '131%' and telephone2 not like '131%' then case when len(telephone2)=11 then telephone2 else telephone1 end end Y