首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一一数据对比修改为选定数据对比

2013-11-13 
逐一数据对比修改为选定数据对比执行以下代码DECLARE @t TABLE(id INT IDENTITY(1,1), no varchar(20))INS

逐一数据对比修改为选定数据对比
执行以下代码

DECLARE @t TABLE(id INT IDENTITY(1,1), no varchar(20))
INSERT @t select '10,11,12,13,26,28'--- ID01
union all select '04,09,19,20,21,26'--- ID02
union all select '01,07,10,23,28,32'--- ID03
union all select '04,06,07,10,13,25'--- ID04
union all select '04,06,15,17,30,31'--- ID05
union all select '01,03,10,21,26,27'--- ID06
union all select '01,09,19,21,23,26'--- ID07
union all select '05,08,09,14,17,23'--- ID08
union all select '05,09,18,20,22,30'--- ID09
union all select '01,02,08,13,17,24'--- ID10
union all select '04,05,11,12,30,32'--- ID11
union all select '02,12,16,17,27,30'--- ID12
union all select '08,13,17,21,23,32'--- ID13
union all select '03,05,07,08,21,31'--- ID14
union all select '04,11,19,25,26,32'--- ID15
union all select '11,17,28,30,31,33'--- ID16

DECLARE @a TABLE(id INT IDENTITY(1,1), no1 CHAR(2),no2 CHAR(2),no3 CHAR(2),no4 CHAR(2),no5 CHAR(2),no6 CHAR(2))
INSERT @a select '10','11','12','13','26','28'--- ID01
union all select '04','09','19','20','21','26'--- ID02
union all select '01','07','10','23','28','32'--- ID03
union all select '04','06','07','10','13','25'--- ID04
union all select '04','06','15','17','30','31'--- ID05
union all select '01','03','10','21','26','27'--- ID06
union all select '01','09','19','21','23','26'--- ID07
union all select '05','08','09','14','17','23'--- ID08
union all select '05','09','18','20','22','30'--- ID09
union all select '01','02','08','13','17','24'--- ID10
union all select '04','05','11','12','30','32'--- ID11
union all select '02','12','16','17','27','30'--- ID12
union all select '08','13','17','21','23','32'--- ID13
union all select '03','05','07','08','21','31'--- ID14
union all select '04','11','19','25','26','32'--- ID15
union all select '11','17','28','30','31','33'--- ID16

SELECT id1 id,no, [R1]=SUM(CASE WHEN aaa=0 THEN 1 ELSE 0 END ),
        [R2]=SUM(CASE WHEN aaa=1 THEN 1 ELSE 0 END),
        [R3]=SUM(CASE WHEN aaa=2 THEN 1 ELSE 0 END),
        [R4]=SUM(CASE WHEN aaa=3 THEN 1 ELSE 0 END),
        [R5]=SUM(CASE WHEN aaa=4 THEN 1 ELSE 0 END),
        [R6]=SUM(CASE WHEN aaa=5 THEN 1 ELSE 0 END),
        [R7]=SUM(CASE WHEN aaa=6 THEN 1 ELSE 0 END)
 FROM 
(
    SELECT b.*,a.id id1,no,
    CASE WHEN CHARINDEX(','+no1+',',','+no+',')>0 THEN 1 ELSE 0 END
    +CASE WHEN CHARINDEX(','+no2+',',','+no+',')>0 THEN 1 ELSE 0 END
    +CASE WHEN CHARINDEX(','+no3+',',','+no+',')>0 THEN 1 ELSE 0 END
    +CASE WHEN CHARINDEX(','+no4+',',','+no+',')>0 THEN 1 ELSE 0 END
    +CASE WHEN CHARINDEX(','+no5+',',','+no+',')>0 THEN 1 ELSE 0 END
    +CASE WHEN CHARINDEX(','+no6+',',','+no+',')>0 THEN 1 ELSE 0 END
    aaa
    FROM @t a,@a b 
)aaa
GROUP BY id1,no
ORDER BY id1

会有这样的结果【简称结果A】
引用
idnoR1R2R3R4R5R6R7
110,11,12,13,26,284560001
204,09,19,20,21,264721101
301,07,10,23,28,324650001
404,06,07,10,13,255640001
504,06,15,17,30,314731001
601,03,10,21,26,275541001
701,09,19,21,23,265441101
805,08,09,14,17,234641001
905,09,18,20,22,307530001
1001,02,08,13,17,244821001
1104,05,11,12,30,323651001
1202,12,16,17,27,306540001
1308,13,17,21,23,321932001
1403,05,07,08,21,313930001
1504,11,19,25,26,325532001
1611,17,28,30,31,334731001


请问如何修改为这样的结果【简称结果B】
引用
idnoR1R2R3R4R5R6R7
110,11,12,13,26,280000001
204,09,19,20,21,260100001
301,07,10,23,28,321010001
404,06,07,10,13,250120001
504,06,15,17,30,312110001
601,03,10,21,26,271130001
701,09,19,21,23,262111101
805,08,09,14,17,233310001
905,09,18,20,22,304220001
1001,02,08,13,17,242610001
1104,05,11,12,30,323430001
1202,12,16,17,27,304430001


1308,13,17,21,23,321722001
1403,05,07,08,21,312830001
1504,11,19,25,26,325432001
1611,17,28,30,31,334731001



为避免帖子太长,接下来具体说明. 数据对比
[解决办法]
要不你先调整数据表中的数据,保持一致的格式;要不就修改下CHARINDEX部分,加入格式转换部分逻辑,看你打算了。

热点排行