(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 怎么写啊
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 怎么写啊
THEN telephone1
ELSE WHEN LEFT(telephone2, 3) = '131%'
THEN telephone2
ELSE WHEN LEN(telephone2) = 11
THEN telephone2
ELSE telephone1 END)y
如果你要分两个字段的话就分两个CASE WHEN 判断
如果是多列
就分别用几个case when end
如果是单列
将别名放外面
if else去掉
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
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
IF ... ELSE ...是控制流语句,跟其他编程语言类似。
CASE ... WHEN ... END是表达式,用来按条件返回一个结果,不是语句。类似于VB中的Choose/Switch函数,而不是C/C++/C#中的SWITCH语句。
你的逻辑有点乱.
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?
case when telephone1 not like '131%' and telephone2 not like '131%' then case when len(telephone2)=11 then telephone2 else telephone1 end end Y