表A:
ID ITEM1 ITEM2 ITEM3 ITEM4 ITEM5 
A   1     3     4    8      9  
A   6     7   
A   4     6
A   4     6
B   3     5     8    9           
B   3     4                       
C   1     3     6    7      8     表LS:
LSA        
(1,3)        
(3,4)        
(4,9)        
(5,8)        
(8,9)        

(1,3,4)       
(3,4,9)
(5,8,9)
… 
(1,3,4,9)
… 1.找表A有含表LS的,結果如下表A1。
2.表A的 L2,L3,L4 字段是表Ls中的组合,表A有重复的组合,要如何删除第二笔以后的,只留第一笔,如ID A的4  6结果如下:
表A1:
ID ITEM1 ITEM2 ITEM3 ITEM4 ITEM5     L2              L3              L4
A   1     3     4    8      9  (1,3),(3,4),(4,9) (1,3,4),(3,4,9) (1,3,4,9) 
A   6     7   
B   3     5     8    9           (5,8),(8,9)        (5,8,9)
B   3     4                         (3,4)
C   1     3     6    7      8       (1,3)

解决方案 »

  1.   

    写的不是很全,根据需要修攺
    create table xyzx(ID varchar(10), ITEM1 int, ITEM2 int, ITEM3  int,ITEM4  int,ITEM5  int)
    insert xyzx select 'A',   1  ,   3,     4,    8,      9  
    union all select 'A',   6,     7,null,null,null   
    union all select 'A',   4,     6,null,null,null
    union all select 'A',   4,     6,null,null,null
    union all select 'B',   3,     5,     8,    9,null
    union all select 'B',   3,     4,null,null,null                       
    union all select 'C',   1,     3,     6 ,   7,      8     
    go
    create table xyzy (LSA varchar(10))
    insert xyzy select '(1,3)'
    union all select '(3,4)'        
    union all select '(4,9)'        
    union all select '(5,8)'        
    union all select '(8,9)'        
    union all select '(1,3,4)'       
    union all select '(3,4,9)'
    union all select '(5,8,9)'
    union all select '(1,3,4,9)'gocreate function getFunX(@a varchar(100),@i int)
    returns varchar(1000)
    as
    begindeclare @s varchar(1000)
    declare @x table(id int identity(1,1),a int)
    declare @y table(a int)
    declare @z table(a varchar(10))insert @x select top 100 1 from syscolumns
    insert @y select cast(substring(@a+',',id,charindex(',',@a+',',id+1)-id) as int) from @x where substring(','+@a,id,1)=','insert @z select lsa from xyzy where len(lsa)-len(replace(lsa,',',''))=@i-1if @i=2
    select @s=isnull(@s+',','')+a from(
    select distinct a.a from @z a,@y b,@y c where 
    charindex(','+ltrim(b.a)+',',replace(replace(a.a,'(',','),')',','))>0 and charindex(','+ltrim(c.a)+',',replace(replace(a.a,'(',','),')',','))>0
    and c.a<>b.a) aa
    else if @i=3
    select @s=isnull(@s+',','')+a from(
    select distinct a.a from @z a,@y b,@y c,@y d where 
    charindex(','+ltrim(b.a)+',',replace(replace(a.a,'(',','),')',','))>0 and charindex(','+ltrim(c.a)+',',replace(replace(a.a,'(',','),')',','))>0
    and charindex(','+ltrim(d.a)+',',replace(replace(a.a,'(',','),')',','))>0
    and c.a<>b.a and d.a<>c.a and b.a<>d.a) aa
    else if @i=4
    select @s=isnull(@s+',','')+a from(
    select distinct a.a from @z a,@y b,@y c,@y d,@y e where 
    charindex(','+ltrim(b.a)+',',replace(replace(a.a,'(',','),')',','))>0 and charindex(','+ltrim(c.a)+',',replace(replace(a.a,'(',','),')',','))>0
    and charindex(','+ltrim(d.a)+',',replace(replace(a.a,'(',','),')',','))>0 and charindex(','+ltrim(e.a)+',',replace(replace(a.a,'(',','),')',','))>0
    and c.a<>b.a and d.a<>c.a and b.a<>d.a and e.a<>c.a and e.a<>d.a and e.a<>b.a) aareturn @s
    end
    goselect *,
    dbo.getFunX(isnull(ltrim(item1),'')+isnull(','+ltrim(item2),'')+isnull(','+ltrim(item3),'')+isnull(','+ltrim(item4),'')+isnull(','+ltrim(item5),''),2) L2,
    dbo.getFunX(isnull(ltrim(item1),'')+isnull(','+ltrim(item2),'')+isnull(','+ltrim(item3),'')+isnull(','+ltrim(item4),'')+isnull(','+ltrim(item5),''),3) L3,
    dbo.getFunX(isnull(ltrim(item1),'')+isnull(','+ltrim(item2),'')+isnull(','+ltrim(item3),'')+isnull(','+ltrim(item4),'')+isnull(','+ltrim(item5),''),4) L4
     from xyzx
      

  2.   

    ID    ITEM1  ITEM2  ITEM3  ITEM4   ITEM5   L2                             L3                 L4                             
    ----- ------ -----  ------ ------- ------- ------------------------------ ------------------ ------------
    A      1      3     4      8       9       (1,3),(3,4),(4,9),(8,9)        (1,3,4),(3,4,9)    (1,3,4,9)
    A      6      7     NULL   NULL    NULL    NULL                           NULL                NULL
    A      4      6     NULL   NULL    NULL    NULL                           NULL                NULL
    A      4      6     NULL   NULL    NULL    NULL                           NULL                NULL
    B      3      5     8      9       NULL    (5,8),(8,9)                    (5,8,9)             NULL
    B      3      4     NULL   NULL    NULL    (3,4)                          NULL                NULL
    C      1      3     6      7       8       (1,3)                          NULL                NULL(所影响的行数为 7 行)
      

  3.   

    TO:roy_88(中国风_燃烧你的激情!!!) 
    对,就是如您所说的,谢谢~
      

  4.   

    TO:chuifengde(树上的鸟儿)
    您真是高人!!!!
    请帮忙再完成删除重复的值,如ID A 4 9有两笔,因为第一笔已有4 9了,故第一笔之后的不要,这样要如何改?非常感谢您!
      

  5.   

    TO:chuifengde(树上的鸟儿)
    请教一句
    insert @x select top 100 1 from syscolumns
    有何目的?
      

  6.   

    TO:chuifengde(树上的鸟儿)
    救命!!!!
    请教一下,为何我将程序码改成我的真实资料表之后其他完全没改却是无法执行的呢?信息如下:信息111,层级15,状态1,行24
    'CREATE FUNCTION' 必须是查询批次的第一个陈述式。
    信息137,层级15,状态2,行35
    必须宣告纯量变数"@a"。
    信息137,层级15,状态2,行38
    必须宣告纯量变数"@i"。
    信息137,层级15,状态2,行40
    必须宣告纯量变数"@i"。
    信息156,层级15,状态1,行46
    接近关键字'else' 之处的语法不正确。
    信息137,层级15,状态2,行46
    必须宣告纯量变数"@i"。
    信息156,层级15,状态1,行53
    接近关键字'else' 之处的语法不正确。
    信息137,层级15,状态2,行53
    必须宣告纯量变数"@i"。
    信息178,层级15,状态1,行62
    此处不得使用会有传回值的RETURN 陈述式。