SQL语句问题 求解决
情况一:
ls_year = String(Year(Today()))
ls_string = "convert(int,(" + ls_year + "-year(csny)+1)/10)"
ls_sql = "SELECT CASE " + ls_string + " WHEN 0 THEN '未知' WHEN " + ls_string + " > 5 THEN '60岁以上' WHEN " + ls_string + " BETWEEN 4 and 5 THEN '50岁-59岁' WHEN " + ls_string + " BETWEEN 3 and 4 THEN '40岁-49岁' WHEN " + ls_string + " BETWEEN 2 and 3 THEN '30岁-39岁' WHEN " + ls_string + " BETWEEN 1 and 2 THEN '20岁-29岁' WHEN " + ls_string + " < 1 THEN '20岁以下' END as xm,count(id) as rs from dm_ry where sfty = '0' group by " + ls_string
提示: sql语法生成失败:第1行:'>'附近有语法错误
情况二:
ls_year = String(Year(Today()))
ls_string = ls_year + "-year(rzrq)+1"
ls_sql = "SELECT CASE " + ls_string + " WHEN (" + ls_string + ") <> 0 THEN " + ls_string + " ELSE '未知' END as xm,count(id) as rs from dm_ry where sfty = '0' group by " + ls_string
提示: sql语法生成失败:第1行:'<'附近有语法错误
情况三:
ls_sql = "SELECT CASE " + is_id + " WHEN NULL THEN '未知' ELSE " + is_id + " END as xm,count(id) as rs from dm_ry where sfty = '0' group by " + is_id
成功!
前两个情况要怎么解决呢?
[解决办法]
楼主case的用法不对:
情况一:
ls_year = String(Year(Today()))
ls_string = "convert(int,(" + ls_year + "-year(csny)+1)/10)"
ls_sql = "SELECT CASE WHEN " + ls_string + " = 0 THEN '未知' WHEN " + ls_string + " > 5 THEN '60岁以上' WHEN " + ls_string + " BETWEEN 4 and 5 THEN '50岁-59岁' WHEN " + ls_string + " BETWEEN 3 and 4 THEN '40岁-49岁' WHEN " + ls_string + " BETWEEN 2 and 3 THEN '30岁-39岁' WHEN " + ls_string + " BETWEEN 1 and 2 THEN '20岁-29岁' WHEN " + ls_string + " < 1 THEN '20岁以下' END as xm,count(id) as rs from dm_ry where sfty = '0' group by " + ls_string
[解决办法]
case只能是如下两种方式之一,而不能混杂.
- SQL code
case 表达式1 when 值1 then 表达式2 when 值2 then 表达式3 else 表达式n end--或case when 表达式1 then 值1 when 表达式2 then 值2 else 值n end