一张表职位表  
字段: 职位,人员 
数据用例:  管理员   李四
            操作员   张三,王五,赵大 
可以多个人名 存在一个字段里 用逗号隔开。
现在 问题是 我要查询出来的时候  显示成管理员  李四  
操作员   张三
操作员   王五
操作员   赵大
该怎么查询呢?求各位大大 帮忙……
优化

解决方案 »

  1.   

    IF OBJECT_ID('tb') IS NOT NULL     DROP TABLE tbGOCREATE TABLE tb (id VARCHAR(10),col VARCHAR(30)) INSERT  INTO tb VALUES  ('管理员','李四') INSERT  INTO tb VALUES  ('操作员','张三,王五,赵大') go   SELECT T1.ID,SUBSTRING(T1.COL,T2.NUMBER,CHARINDEX(',',T1.COL+',',NUMBER)-T2.NUMBER)FROM TB T1INNER JOIN MASTER..SPT_VALUES T2 ON T2.TYPE='P' AND CHARINDEX(',',','+T1.COL,T2.NUMBER)=T2.NUMBER --结果:/*
    管理员 李四
    操作员 张三
    操作员 王五
    操作员 赵大
    */
      

  2.   

    ----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-03-20 15:37:11
    -- Version:
    --      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
    -- Jun 17 2011 00:54:03 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
    --
    ----------------------------------------------------------------
    --> 测试数据:[huang]
    if object_id('[huang]') is not null drop table [huang]
    go 
    create table [huang]([职位] varchar(6),[人员] varchar(14))
    insert [huang]
    select '管理员','李四' union all
    select '操作员','张三,王五,赵大'
    --------------开始查询--------------------------SELECT 
            a.[职位] ,
            SUBSTRING([人员], number, CHARINDEX(',', [人员] + ',', number) - number) AS [人员]
    FROM    [huang] a ,
            master..spt_values
    WHERE   number >= 1
            AND number < LEN([人员])
            AND type = 'p'
            AND SUBSTRING(',' + [人员], number, 1) = ','
    ----------------结果----------------------------
    /* 
    ------ --------------
    管理员    李四
    操作员    张三
    操作员    王五
    操作员    赵大
    */
      

  3.   

    SQL SERVER对于字符串的聚合拆分支持还真不是一般两般的弱