现在又两张数据表,如下OA_Group和RS_YGB的部分内容,表中要用到的字段信息如下4个
======OA_Group表信息=======================================================
ZWBH      职务编号        nvarchanr
QXLB      权限类别        nvarchanrSELECT ZWBH,QXLB FROM OA_Group
ZWBH    QXLB  
2 0654,0655,0656,0657,0658,0659,0660,0661,0662
3 0202,0203,0204,0206,0209,0210,0211,0407,0423,0425
......
=======RS_YGB表信息======================================================
grouplist 职务分组列表    nvarchanr
YGBH      员工编号        intSELECT grouplist,YGBH FROM RS_YGB
grouplist                                              YGBH         
2,3,1273,1275,1288,1291,1309,1328,1332,1354            638
3,1289,1273,1308,1316,1328,1338,1307,1388,1302,1333    128541
......
=========================================================================
我想是通过ZWBH(职务编号)和grouplist(职务分组列表)的对应关系,得到QXLB(权限类别里通过符号分割开的明细)和YGBH(员工编号)的一一对应关系?谢谢了?员工权限关联

解决方案 »

  1.   

    你先这样拆出来吧。然后再匹配----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-02-22 17:00:18
    -- 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]([QXLB] varchar(44))
    insert [huang]
    select '0654,0655,0656,0657,0658,0659,0660,0661,0662'
    --------------开始查询--------------------------SELECT  SUBSTRING([QXLB], number, CHARINDEX(',', [QXLB] + ',', number) - number) AS [QXLB]
    FROM    huang a ,
            master..spt_values
    WHERE   number >= 1
            AND number < LEN([QXLB])
            AND type = 'p'
            AND SUBSTRING(',' + [QXLB], number, 1) = ','
    ----------------结果----------------------------
    /* 
    QXLB
    --------------------------------------------
    0654
    0655
    0656
    0657
    0658
    0659
    0660
    0661
    0662
    */
      

  2.   

    你看这样行不行CREATE TABLE OA_Group(ZWBH NVARCHAR(4000), QXLB NVARCHAR(4000))
    CREATE TABLE RS_YGB(grouplist NVARCHAR(4000) , YGBH NVARCHAR(4000))
    go
    insert into OA_Group
    select '2','0654,0655,0656,0657,0658,0659,0660,0661,0662'
    union all
    select '3','0202,0203,0204,0206,0209,0210,0211,0407,0423,0425'insert into RS_YGB
    select '2,3,1273,1275,1288,1291,1309,1328,1332,1354','638'
    union all
    SELECT '3,1289,1273,1308,1316,1328,1338,1307,1388,1302,1333','128541'go
    select *
    from OA_Group t1
    left join RS_YGB t2 on CHARINDEX(','+T1.ZWBH+',',','+T2.grouplist+',')>0
    godrop TABLE OA_Group
    drop TABLE RS_YGB
      

  3.   

    ZWBH QXLB grouplist YGBH
    2 0654,0655,0656,0657,0658,0659,0660,0661,0662 2,3,1273,1275,1288,1291,1309,1328,1332,1354 638
    3 0202,0203,0204,0206,0209,0210,0211,0407,0423,0425 2,3,1273,1275,1288,1291,1309,1328,1332,1354 638
    3 0202,0203,0204,0206,0209,0210,0211,0407,0423,0425 3,1289,1273,1308,1316,1328,1338,1307,1388,1302,1333 128541
      

  4.   

    很好,问题已经解决,谢谢斑竹DBA_Huangzj和peng13nannan,学习了。