导读数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应...
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
在数据库表tbl1中有一个字段Keywords,它是nvarchar类型,长度为1000,该字段的内容是所要分析的论文的关键字 
id                        keywords  
----------------------------------------------------------- 
1                          kw1;kw2;kw3 
2                          kw2;kw3 
3                          kw3;kw1;kw4 
问题1。 
对于在keywords字段中出现的所有关键字集合(上例中关键字集合为{kw1,kw2,kw3,kw4})中的任意一个关键字,要统计它出现的次数(也就是包含该关键字的纪录的条数),然后写到另一张表中。最后的效果就是 
keywords       count 
------------------------- 
kw1              2 
kw2              2 
kw3              3 
kw4              1 
问题2。 
在此基础上,要进行组合查询。也就是说在整个关键字集合中任意抽出两个关键字,统计它们在数据库表纪录中同时出现的次数。对于上题,最后效果要是: 
keywords             count 
---------------------------------- 
kw1;kw2                1 
kw1;kw3                2 
kw1;kw4                1 
kw2;kw3                2 
kw2;kw4                0 
kw3;kw4                1 
-------------------------------------------------------------------------------------- 
--统计示例 
--为统计处理专门做的序数表 
select top 1000 id=identity(int,1,1) into 序数表 from syscolumns a,syscolumns b 
alter table 序数表 add constraint pk_id_序数表 primary key(id) 
go 
--示例数据 
create table tbl1(id int,keywords nvarchar(1000)) 
insert tbl1 select 1,’kw1;kw2;kw3’ 
union  all  select 2,’kw2;kw3’ 
union  all  select 3,’kw3;kw1;kw4’ 
go 
--第一种统计(计数) 
select keyword=substring(a.keywords,b.id,charindex(’;’,a.keywords+’;’,b.id)-b.id) 
 ,[count]=count(distinct a.id) 
from tbl1 a,序数表 b 
where b.id<=len(a.keywords) 
 and substring(’;’+a.keywords,b.id,1)=’;’ 
group by substring(a.keywords,b.id,charindex(’;’,a.keywords+’;’,b.id)-b.id) 
go 
--第二种统计(组合统计) 
select keyword=substring(a.keywords,b.id,charindex(’;’,a.keywords+’;’,b.id)-b.id) 
 ,[count]=count(distinct a.id),a.id 
into #t 
from tbl1 a,序数表 b 
where b.id<=len(a.keywords) 
 and substring(’;’+a.keywords,b.id,1)=’;’ 
group by substring(a.keywords,b.id,charindex(’;’,a.keywords+’;’,b.id)-b.id),a.id 
select keyword=a.keyword+’;’+b.keyword,[count]=sum(case a.id when b.id then 1 else 0 end) 
from #t a,#t b 
where a.keyword<b.keyword 
group by a.keyword,b.keyword 
order by keyword 
drop table #t 
go 
--删除测试环境 
drop table tbl1,序数表 
/*--测试结果 
--统计1 
keyword    count    
---------- -------- 
kw1        2 
kw2        2 
kw3        3 
kw4        1 
(所影响的行数为 4 行) 
--统计2 
keyword                 count       
----------------------- ----------- 
kw1;kw2                 1 
kw1;kw3                 2 
kw1;kw4                 1 
kw2;kw3                 2 
kw2;kw4                 0 
kw3;kw4                 1 
(所影响的行数为 6 行) 
--*/
全新的路由器不仅让你更稳定快速地连接无线网络,更可以让家中的智能设备连接在一起。
……