组合处理

原创 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

组合处理

原贴地址:http://community.csdn.net/Expert/topic/3338/3338785.xml?temp=.9853022有表t1:ID | Place Time  Leve...
  • chenzhiya
  • chenzhiya
  • 2008年01月03日 15:10
  • 172

每天一个设计模式之Decorator模式解决类间组合爆炸问题

模式动机Decorator模式是一种相对简单的对象结构性模式,动态和对象是个对应的关系,正如静态和类这样的对应关系,编译时能够决定的特质是静态特质,动态则表示在运行时进行操作,传统情况下使用的继承是静...
  • weixin_36708538
  • weixin_36708538
  • 2017年12月07日 17:45
  • 71

机器学习之离散特征自动化扩展与组合

导语: 总所周知,机器学习中特征工程处于十分重要的位置,整个学习中至少会花二分之一甚至更多的时间用于特征工程至少(对于统计学习)。但是如何能够有效地实现特征的自动化扩展、组合和量化,大家都会有各自的方...
  • kwame211
  • kwame211
  • 2017年09月27日 09:26
  • 227

特征工程(补充)--特征组合

特征组合变化也属于特征选择的一种手段,这部分工作可发挥的空间就看你的想像力和经验了。这里的组合变化远不限于把已有的特征加减乘除(比如Kernel Tricks之类)。      举个比较有想像力的例...
  • u013710265
  • u013710265
  • 2017年05月13日 13:28
  • 1664

GPUImage 组合滤镜

GPUIamgeFilter *_filter = [[GPUImageFilterGroup alloc]init];          GPUImageContrastFilter *cont...
  • u011270282
  • u011270282
  • 2016年01月06日 11:04
  • 1916

Codeforces 575H Bots 组合恒等式+逆元法求组合数取模

组合数+逆元法
  • setio
  • setio
  • 2015年09月07日 20:24
  • 613

C# winform 组合键

c# winform 组合键   if (e.KeyCode == Keys.S && e.Modifiers == Keys.Control)         //Ctrl+S     ...
  • TIANDIZHUSHEN
  • TIANDIZHUSHEN
  • 2014年11月16日 20:23
  • 651

机器学习:集成学习

机器学习:集成学习        继承学习最初的model是并行的去计算一个model在不同的参数下得到的结果,我们从里面找一个最好。有些时候我们的model实在是精度上不去,就可以上集成学习,因...
  • liyaohhh
  • liyaohhh
  • 2016年04月08日 11:41
  • 1253

PHP 路径处理

  • hxmcnu
  • hxmcnu
  • 2014年10月08日 22:43
  • 625

(2.1.19.3)深入理解Java:注解(Annotation)–编译时注解的处理

一注解 二注解处理器 三虚处理器AbstractProcessor 1 处理器对全局代码的扫描处理流程 11 javaxannotationprocessingProcessor中的书写顺序决定注册处...
  • fei20121106
  • fei20121106
  • 2017年06月26日 17:53
  • 929
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:组合处理
举报原因:
原因补充:

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