表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)
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)
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
----- ------ ----- ------ ------- ------- ------------------------------ ------------------ ------------
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 行)
对,就是如您所说的,谢谢~
您真是高人!!!!
请帮忙再完成删除重复的值,如ID A 4 9有两笔,因为第一笔已有4 9了,故第一笔之后的不要,这样要如何改?非常感谢您!
请教一句
insert @x select top 100 1 from syscolumns
有何目的?
救命!!!!
请教一下,为何我将程序码改成我的真实资料表之后其他完全没改却是无法执行的呢?信息如下:信息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 陈述式。