# 组合处理

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

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

• 本文已收录于以下专栏：

## 组合处理

• chenzhiya
• 2008年01月03日 15:10
• 172

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

• weixin_36708538
• 2017年12月07日 17:45
• 71

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

• kwame211
• 2017年09月27日 09:26
• 227

## 特征工程（补充）--特征组合

• u013710265
• 2017年05月13日 13:28
• 1664

## GPUImage 组合滤镜

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

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

• setio
• 2015年09月07日 20:24
• 613

## C# winform 组合键

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

## 机器学习:集成学习

• liyaohhh
• 2016年04月08日 11:41
• 1253

## PHP 路径处理

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

## （2.1.19.3）深入理解Java：注解（Annotation）–编译时注解的处理

• fei20121106
• 2017年06月26日 17:53
• 929

举报原因： 您举报文章：组合处理 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)