组合处理

原创 2004年09月04日 20:36:00

原贴地址:
http://community.csdn.net/Expert/topic/3338/3338785.xml?temp=.9853022

有表t1:
ID | Place Time  Level
---|-------------------
 1 |  P1    T3    L1   
 2 |  P1    T1    L1   
 3 |  P3    T1    L2   
 4 |  P2    T2    L3   
 5 |  P1    T1    L1   
 6 |  P2    T3    L3   

想实现的是:

生成字段间的所有项的组合,并统计表t1中包含该组合的纪录的条数(只统计有数据的组合)

1项组合
item  count
 P1    3
 P2    2
.....

2项组合
item   count
 P1_T1   2
 P1_T3   1
....

3项组合
item   count
 P1_T1_L1   2
 P1_T1_L2   1
....

-----------------------------------------------------------------------

--示例

--示例数据
create table t1(ID int,Place varchar(10),Time varchar(10),Level varchar(10),aa varchar(10))
insert t1 select 1,'P1','T3','L1','aa'
union all select 2,'P1','T1','L1','bb'
union all select 3,'P3','T1','L2','aa'
union all select 4,'P2','T2','L3','aa'
union all select 5,'P1','T1','L1','aa'
union all select 6,'P2','T3','L3','bb'
go

--通用的处理存储过程
create proc p_qry
@count int=1 --组合的项数
as
declare @sa Nvarchar(4000),@sb Nvarchar(4000)
declare @s2 Nvarchar(4000),@s3 Nvarchar(4000)
declare @s varchar(8000)

if isnull(@count,0)<0 set @count=1
select a=name,b=colid
into #t from syscolumns
where id=object_id(N't1') and name<>'ID'
set @count=case when @count>@@rowcount then @@rowcount else @count end

if @count=1
 set @sa='select @s=@s+'' union all select item=[''+a+''],[count]=count(*) from t1 group by [''+a+'']'' from #t'
else
begin
 select @sa='select @s=@s+'' union all select item=[''+a.a+'']'''
  ,@sb='''[''+a.a+'']'''
  ,@s2='from #t a'
  ,@s3='where a.b'
 while @count>1
  select @count=@count-1
   ,@sa=@sa+'+''+''''_''''+[''+'+char(@count/26+97)+char(@count%26+97)+'.a+'']'''
   ,@sb=@sb+'+'',[''+'+char(@count/26+97)+char(@count%26+97)+'.a+'']'''
   ,@s2=@s2+',#t '+char(@count/26+97)+char(@count%26+97)
   ,@s3=@s3+'<'++char(@count/26+97)+char(@count%26+97)+'.b'
    +' and '++char(@count/26+97)+char(@count%26+97)+'.b'
 select @sa=@sa+'+'',[count]=count(*) from t1 group by ''+'+@sb+' '+@s2+' '+left(@s3,len(@s3)-9)
end

set @s=''
exec sp_executesql @sa,N'@s varchar(8000) out',@s out
set @s=stuff(@s,1,11,'')
exec(@s)
go

--调用
exec p_qry 3
go

--删除测试
drop table t1
drop proc p_qry

树形结构的处理——组合模式(一)

树形结构在软件中随处可见,例如操作系统中的目录结构、应用软件中的菜单、办公系统中的公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题,组合模式通过一种巧妙的设计方案使得...
  • csdn_ds
  • csdn_ds
  • 2017年11月14日 10:32
  • 20

树形结构的处理——组合模式

本文转载自 :http://blog.csdn.net/lovelion/article/details/7956898 树形结构在软件中随处可见,例如操作系统中的目录结构、应用软件...

BigData学习1_数据处理平台架构中的SMACK组合:Spark、Mesos、Akka、Cassandra以及Kafka

在今天的文章中,我们将着重探讨如何利用SMACK(即Spark、Mesos、Akka、Cassandra以及Kafka)堆栈构建可扩展数据处理平台。虽然这套堆栈仅由数个简单部分组成,但其能够实现大量不...

批处理中的组合命令 &、&&、||

&、&&、|| 为组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。 &符号允许同时执行多条命令,当第一个命令执行失败了,也不影响后边的命令执行。这里 & 两边的命令是顺序执行 的,...

使用Microsoft Visual Studio International Pack获得中文字符串的所有拼音组合(处理多音字)

最近一个项目中客户需要做人名的拼音检索,就像QQ好友那样,输入拼音就提示符合的联系人。上网找了一下,发现微软已经发布了相关的支持库,不仅可以处理拼音,还能处理笔画、简繁体转换等。csdn上有一篇博客介...
  • coollzt
  • coollzt
  • 2012年02月09日 17:24
  • 617

Storm实时数据分析的常用架构(组合):队列服务器+storm集群实时处理+mysql存储

问题导读: 1.Storm实时组合,如何获取数据? 2.消息队列服务器可以采用什么技术? 3.消息在Storm中的传输由Storm框架的collector收集发射完成? 4.处理结果可以放在什...

组合模式 -- 树形结构处理

树形结构在软件中随处可见,例如操作系统中的目录结构、应用软件中的菜单、办公系统中的公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题,组合模式通过一种巧妙的设计方案使得...

会议室可分隔组合时的音频处理解决方案

本文已成功投稿在“数字音视工程网”期刊上(点击查看原文) 南京台湾名品城(Nanjing Taiwan Trade Mart)由南京市政府与台北世贸中心共同兴建、贸协指导、华新丽华规划营运,为复...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:组合处理
举报原因:
原因补充:

(最多只允许输入30个字)