代码是这样的:
--学历与岗位略分视图
CREATE VIEW vbXLGW
as
  select  
  XL,--学历
  case  
      when XY='校直属' and RYLB like '%行政%' then '行政职能人员'
      when XY='校直属' and RYLB like '%教辅%' then '教辅人员'
      when XY='校直属' and RYLB like '%工勤%' then '工勤人员'      
      when XY='二级学院' and RYLB like '%教师%' then '专任教师'
      when GW like '%主任%' or GW like '%行政%' or GW like '%教务%' then '党政教学管理人员'
      when GW like '%书记%' or GW like '%辅导%' or GW like '%培训%' then '学生管理人员'      
      when GW like '%管理%' or GW like '%实验%' then '实验室管理人员'
  end as GWLF,--岗位略分    sum(RS) as RS--人数
  from  
  (
      select      
      case
          when XLXW like '%博士%' then '博士' 
          when XLXW like '%硕士%' then '硕士'
          when XLXW like '%研究生%' or XLXW like '%本科%' or XLXW like '%大学%' then '本科'
          when XLXW like '%大专%' then '专科'
          else '专科以下'
      end as XL,--学历
      case
          when BM like '%学院' or BM like '%部' then '二级学院'
          else '校直属'
      end as XY,--学校学院分类  
      RYLB,--人员类别  
      GW,--岗位      
      count(*) as RS--人数
      from tbPersons
      join tbBM on (tbBM.AID=BMID)  
      join tbRYLB on (tbRYLB.AID=RYLBID)      
      group by XL,XY,RYLB,GW
  )aa  
  group by XL,GWLF;
分析的时候没错,但执行的时候出现这种错误:
消息 207,级别 16,状态 1,过程 vbXLGW,第 39 行
列名 'XL' 无效。
消息 207,级别 16,状态 1,过程 vbXLGW,第 39 行
列名 'XY' 无效。
消息 207,级别 16,状态 1,过程 vbXLGW,第 41 行
列名 'GWLF' 无效。
请大家帮我分析分析怎么解决,搞了一天了就是不能完全正确。

解决方案 »

  1.   

    前面不加聚合函数 到后面group by 的时候不能直接引用别名
      

  2.   

    --学历与岗位略分视图
    CREATE VIEW vbXLGW
    as
    select XL,GWLF,sum(RS) as RS--人数
     from (
      select  
      XL,--学历
      case  
          when XY='校直属' and RYLB like '%行政%' then '行政职能人员'
          when XY='校直属' and RYLB like '%教辅%' then '教辅人员'
          when XY='校直属' and RYLB like '%工勤%' then '工勤人员'      
          when XY='二级学院' and RYLB like '%教师%' then '专任教师'
          when GW like '%主任%' or GW like '%行政%' or GW like '%教务%' then '党政教学管理人员'
          when GW like '%书记%' or GW like '%辅导%' or GW like '%培训%' then '学生管理人员'      
          when GW like '%管理%' or GW like '%实验%' then '实验室管理人员'
      end as GWLF,--岗位略分 
      RS  
      from (
      select *,count(*) as RS--人数
      from  
      (
          select      
          case
              when XLXW like '%博士%' then '博士' 
              when XLXW like '%硕士%' then '硕士'
              when XLXW like '%研究生%' or XLXW like '%本科%' or XLXW like '%大学%' then '本科'
              when XLXW like '%大专%' then '专科'
              else '专科以下'
          end as XL,--学历
          case
              when BM like '%学院' or BM like '%部' then '二级学院'
              else '校直属'
          end as XY,--学校学院分类  
          RYLB,--人员类别  
          GW,--岗位      
          from tbPersons
          join tbBM on (tbBM.AID=BMID)  
          join tbRYLB on (tbRYLB.AID=RYLBID)) k      
          group by XL,XY,RYLB,GW
      )aa  ) z 
      group by XL,GWLF;