楼主应该贴下表结构和函数的定义。
请理解一下group by的定义。
《当 SELECT 语句中包含 GROUP BY 关键字时,对可以在选择列表中指定的项有一些限制。在该选择列表中所允许的项目是:
分组列。
为分组列中的每个值只返回一个值的表达式,例如将列名作为其中一个参数的聚合函数。这些函数称为矢量聚合》
如果不能满足上面的条件,则很有可能结果出错。

解决方案 »

  1.   

    查询1正确,说明自定义函数没有错误.
    代码如下:
    create function get_parent_dep_name 
    (@department varchar(20),@dep_code varchar(20))
    returns varchar(30)
    as
    begin
    declare @parent_dep_name varchar(20)
    select @parent_dep_name=parent_dep from b_department where dep_name=@department
    -- 当求得大部门为总经理时,把@department赋值给大部门
    if @parent_dep_name='总经理'
    set  @parent_dep_name=@department-- 当@dep_code参数为dep_code时,求出部门对应的部门代码
    if @dep_code='dep_code'select @parent_dep_name=dep_code from b_department where dep_name=@parent_dep_name-- 当@dep_code参数为dep_name时,求出部门对应的业务总监名字
    -- 求出业务总监的名字
    if @dep_code='dep_name'select @parent_dep_name=parent_dep_name from clerk_department_parent_dep where parent_dep=@parent_dep_name group by parent_dep,parent_dep_namereturn (@parent_dep_name)
    end
    大侠高手请指点,本人弄了几天都不得其解!
      

  2.   

    create function get_parent_dep_username 
    (@department varchar(20),@dep_code varchar(20))
    returns varchar(30)
    as
    begin
    declare @parent_dep_name varchar(20)
    select @parent_dep_name=parent_dep from b_department where dep_name=@department
    -- 当求得大部门为总经理时,把@department赋值给大部门
    if @parent_dep_name='总经理'
    set  @parent_dep_name=@department-- 当@dep_code参数为dep_code时,求出部门对应的部门代码
    if @dep_code='dep_code'select @parent_dep_name=dep_code from b_department where dep_name=@parent_dep_nameselect @parent_dep_name=parent_dep_name from clerk_department_parent_dep where parent_dep=@parent_dep_name group by parent_dep,parent_dep_namereturn (@parent_dep_name)
    end if 
    ////////////////////////////////////////////////////////////////////////////////
    big_name=dbo.get_parent_dep_username(department,'dep_name')
     试一下 看看
      

  3.   

    http://blog.csdn.net/zjcxc/archive/2004/07/21/47300.aspx