-------------------------------------
人员表(其中部门字段里有多个部门id,以逗号隔开)
name   pwd   deptid
张三    123   1,3,9
李四    123    2,4
-----------------------------------
部门代码表
deptid   depname
1         综合部
2         管理部
3          财务部
4         人力资源部
....
9         软件开发部
--------------------------------
请教:我现在用datagrid绑定人员表的数据,但是部门要显示中文,并以逗号隔开。这个sql怎么写?

解决方案 »

  1.   

    如果用的是 Sql Server 可以用存储过程解决...
      

  2.   

    原理:首先利用","分割(人员表)->deptid...然后通过每个元素与(部门代码表)->deptid进行匹配...最后将得到的depnames再利用","分开...
      

  3.   


    --创建函数
    CREATE FUNCTION [DBO].GetDept( @ids varchar(100) ) 
    RETURNS varchar(1000) 
    AS 
    BEGIN 
        IF (@ids='') BEGIN RETURN '' END

        DECLARE authors_cursor CURSOR FOR SELECT depname FROM 部门代码表 WHERE charindex(','+CAST(deptid AS VARCHAR(20))+',',','+@ids+',')>0    
        OPEN authors_cursor 
        DECLARE @sname varchar(100) FETCH NEXT FROM authors_cursor INTO @sname 

        DECLARE @S varchar(3000) 
        SET @S='' 
        DECLARE @sT varchar(1) 
        SET @sT =''
        WHILE @@FETCH_STATUS = 0 
        BEGIN
           SET @S =@S+@sT+@sname FETCH NEXT FROM authors_cursor INTO @sname 
           SET @sT = ','
        END 
        CLOSE authors_cursor
        DEALLOCATE authors_cursor
        RETURN @S
    END
    GO
    SELECT *,[DBO].GetDept(deptid) AS deptNAME FROM 人员表--查询
      

  4.   

    SELECT *,[DBO].GetDept(deptid) AS deptNAME FROM 人员表--查询
    不能这么写吧
      

  5.   

    最好是在cs页里实现的,oracle数据库
      

  6.   

    要看您们用的是什么数据库...如果是oracle, 就直接用上面那位仁兄的代码吧...接分!呵呵...
      

  7.   

    借鉴shineran写的,改成了oracle的。谢谢,给分