新建一个视图,SELECT
  驾驶员.姓名 姓名,
  round(round(to_number(sysdate - 驾驶员.出生日期))/365) AS 年龄,
  round(round(to_number(sysdate - 驾驶员.领证日期))/365) AS 驾龄,
  round(round(to_number(sysdate - 驾驶员.领证日期))/365 - 1) AS 从业年龄,
  驾驶员.身高 身高,
  驾驶员.体重 体重,
  驾驶员.视力 视力,
  驾驶员.听力 听力,
  驾驶员.速估测定 速度估计检测值,
  驾驶员.动视测定 动体视力检测值,
  驾驶员.暗适测定 暗适应检测值,
  驾驶员.深视测定 深度知觉检测值,
  驾驶员.处判测定 处置判断检测值,
  驾驶员.综合评价 适宜性综合评价值,
  1 - 0.01*(abs(年龄-35)/25 + (exp(驾龄-3)-exp(3-驾龄))/(exp(驾龄-3)+exp(3-驾龄)) + (exp(从业年龄-3)-exp(3-从业年龄))/(exp(从业年龄-3)+exp(3-从业年龄))) AS 年龄类计权值
    
FROM
  驾驶员但是老报错,说是语法没有错误,  无法解析列  年龄
哪位大大帮忙看看啊。。谢谢了。。

解决方案 »

  1.   

    因为你的年龄是计算出来的后面起的别名,因此下面是不能直接引用的,要么按照我下面的方法修改,
    要么把下面的年龄替换成 计算公式 后再编译。

    SELECT 姓名,
           年龄,
           从业年龄,
           身高,
           体重,
           视力,
           听力,
           速度估计检测值,
           动体视力检测值,
           暗适应检测值,
           深度知觉检测值,
           处置判断检测值,
           适宜性综合评价值,
           1 - 0.01 * (ABS(年龄 - 35) / 25 + (EXP(驾龄 - 3) - EXP(3 - 驾龄)) /
           (EXP(驾龄 - 3) + EXP(3 - 驾龄)) +
           (EXP(从业年龄 - 3) - EXP(3 - 从业年龄)) /
           (EXP(从业年龄 - 3) + EXP(3 - 从业年龄))) AS 年龄类计权值
      FROM (SELECT 驾驶员.姓名 姓名,
                   ROUND(ROUND(TO_NUMBER(SYSDATE - 驾驶员.出生日期)) / 365) AS 年龄,
                   ROUND(ROUND(TO_NUMBER(SYSDATE - 驾驶员.领证日期)) / 365) AS 驾龄,
                   ROUND(ROUND(TO_NUMBER(SYSDATE - 驾驶员.领证日期)) / 365 - 1) AS 从业年龄,
                   驾驶员.身高 身高,
                   驾驶员.体重 体重,
                   驾驶员.视力 视力,
                   驾驶员.听力 听力,
                   驾驶员.速估测定 速度估计检测值,
                   驾驶员.动视测定 动体视力检测值,
                   驾驶员.暗适测定 暗适应检测值,
                   驾驶员.深视测定 深度知觉检测值,
                   驾驶员.处判测定 处置判断检测值,
                   驾驶员.综合评价 适宜性综合评价值
            
              FROM 驾驶员)
      

  2.   

    +1
    round(round(to_number(sysdate - 驾驶员.出生日期))/365) AS "年龄" 年龄是这组计算结果的别名.
    别名不能同一层使用的,所以你还要再嵌套一层select来使用. 或者把年龄替换成这组公式也行.
    其他几列同理