OptionTable表
    OID | IID | OptionName 
   1276 | 302 | 男
   1277 | 302 | 女 
   1278 | 303 | 音乐
   1279 | 303 | 旅游
   1280 | 303 | 运动
Z11表
ID | F303            |F302
1  | 1278            |男
2  | 1278,1279,1280  |女
3  | 1279,1280       |女
4  | 1278,1280       |男
5  | 1280            |男如何得到数据集
    OID | IID | OptionName | '自定义列'
   1278 | 303 | 音乐       |  3     /* OID在Z11表F+'IID'列中出现的次数,IID的值是搜索条件,固定的。*/
   1279 | 303 | 旅游       |  2
   1280 | 303 | 运动       |  4

解决方案 »

  1.   


    declare @OptionTable表 table (OID int,IID int,OptionName varchar(4))
    insert into @OptionTable表
    select 1276,302,'男' union all
    select 1277,302,'女' union all
    select 1278,303,'音乐' union all
    select 1279,303,'旅游' union all
    select 1280,303,'运动'declare @Z11表 table (ID int,F303 varchar(16),F302 varchar(16))
    insert into @Z11表
    select 1,'1278','男' union all
    select 2,'1278,1279,1280','女' union all
    select 3,'1279,1280','女' union all
    select 4,'1278,1280','男' union all
    select 5,'1280','男'select OID,IID,OptionName,count(*) as '自定义列' from @OptionTable表 a left join @Z11表 b
    on charindex(','+ltrim(a.OID)+',',','+F303+',')>0
    where IID=303
    group by OID,IID,OptionName
    order by OID
    /*
    OID         IID         OptionName 自定义列
    ----------- ----------- ---------- -----------
    1278        303         音乐         3
    1279        303         旅游         2
    1280        303         运动         4
    */