当前位置: 代码迷 >> Sql Server >> 数据拆分,重复的组合只保留一个,怎么执行代码完成
  详细解决方案

数据拆分,重复的组合只保留一个,怎么执行代码完成

热度:57   发布时间:2016-04-24 10:43:14.0
数据拆分,重复的组合只保留一个,如何执行代码完成
if object_id('tempdb.dbo.#temp') is not null drop table #temp
go 
create table #temp([前区胆码]nvarchar(20),[前区拖码] nvarchar(100),[后区胆码] nvarchar(50),[后区拖码] nvarchar(100))
insert #temp
select '10' ,'01 02 03 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35','','01 02 03 04 05 06 07 08 09 10 11 

12'union all
select '10 28' ,'01 02 03 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35','03','05 07 09 10 12'union all
select '03 10 28' ,'01 02 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35','12','01 02 03 05 07 09 11'union all
select '06 07 10 28' ,'01 02 03 04 05 08 09 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35','12','01 02 05 08 09'union all
select '' ,'01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35','','05 09'

--------------生成数据--------------------------


为何执行代码后,无法生成数据
显示的是

消息 8152,级别 16,状态 4,第 1 行
将截断字符串或二进制数据。
语句已终止。


需要解决的问题是
1、第一步生成数据
2、按照 前区胆码、前区拖码、后区胆码、后区拖码里的号码,进行胆拖的投注拆分[,现在用公式只能知道总数,但就不会执行什么代码可以有详细组合(重复的组合只保留一个)

例如,以第三行数据为例
'03 10 28' ,'01 02 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35','12','01 02 03 05 07 09 11'----第三行

(假如为a个前区胆码)03 10 28 
(假如为b个前区拖码)01 02 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35
(假如为c个后区胆码)12
(假如为c个后区拖码)01 02 03 05 07 09 11  

前区胆码个数为3(0≤a≤4),
前区拖码个数为32(5-a≤b≤35-a),
后区胆码个数为1(0≤c≤1),
后区拖码个数为6(2-c≤d≤12-c),
则此胆拖投注的注数个数为
胆拖的投注拆分说明,总的投注数为COMBIN(b,5-a)*COMBIN(d,2-c)。

前区combin(32,2)×后区combin(6,1)=2976个组合数。 
前区combin(32,2)=496 * 后区combin(6,1)=6,那么就有496*6=2976注投注号码,请问如何用执行代码后的结果可以看到详细的组合(重复的组合只保留一个)

胆拖投注注数计算公式:

  设前区胆码个数为a(0≤a≤4),前区拖码个数为m(5-a≤b≤35-a),后区胆码个数为c(0≤c≤1),后区拖码个数为d(2-c≤d≤12-c),则此胆拖投注的注数个数为:

combin(b,5-a)×combin(d,2-c)。

  例:前区胆码个数为3(0≤a≤4),前区拖码个数为32(5-a≤b≤35-a),后区胆码个数为1(0≤c≤1),后区拖码个数为6(2-c≤d≤12-c),则此胆拖投注的注数个数为:combin(32,2)×combin(6,1)=2976。

  
组合:是从n个不同的元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合。
  
组合数公式:  combin(n,m)=n(n-1)…(n-m+1)/1*2…m=n!/m!(n-m)!
------解决方案--------------------
你太粗心了,'01 02 03 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35'里一共101个字符,前区拖码你只定义了100个,所以数据被截断
  相关解决方案