理解上的偏差导致数据上的偏差,我找不出原因,请大师指教!
建立TB1
NSERT INTO TB1
SELECT '01','02','03','04','05','06'
UNION ALL SELECT '01','02','03','04','05','07'
UNION ALL SELECT '01','02','03','04','05','08'
UNION ALL SELECT '01','02','03','04','05','09'
UNION ALL SELECT '01','02','03','04','05','10'
(TB1比较TB2有0-6个相同数字的记录,R0  R1  R2  R3 R4 R5 R6分别为0/1/2/3/4/5/6个相同数记录)下图是与11条数据比较执行结果(GG),
ID  NO1 NO2 NO3 NO4 NO5 NO6   R0   R1  R2  R3 R4 R5 R6
1   1    2   3   4   5   6     0   0   0   0  0  10  1
2   1    2   3   4   5   7     0   0   0   0  0  10  1
3   1    2   3   4   5   8     0   0   0   0  0  10  1
4   1    2   3   4   5   9     0   0   0   0  0  10  1
5   1    2   3   4   5  10     0   0   0   0  0  10  1
(TB1比较TB2有0-6个相同数字的记录)下图是与11条数据比较执行结果(MM),这个表6个数全相同的记录怎么没有,相同5个数的记录应该是10,有一个数相同的记录应该是0,有2个数相同的记录应该是0,那么TB1和TB2有一个数相同的记录没有记作0,但以下记录显示有11,请大师检查。
ID  NO1 NO2 NO3 NO4 NO5 NO6   R0 R1  R2  R3 R4 R5 R6
1   1    2   3   4   5   6    0  11  11   0  0  0  0
2   1    2   3   4   5   7    0  11  11   0  0  0  0
3   1    2   3   4   5   8    0  11  11   0  0  0  0
4   1    2   3   4   5   9    0  11  11   0  0  0  0
5   1    2   3   4   5  10    0  11  11   1  0  0  0建立TB2
INSERT INTO TB2
SELECT '01','02','03','04','05','06'
UNION ALL SELECT '01','02','03','04','05','07'
UNION ALL SELECT '01','02','03','04','05','08'
UNION ALL SELECT '01','02','03','04','05','09'
UNION ALL SELECT '01','02','03','04','05','10'
UNION ALL SELECT '01','02','03','04','05','11'
UNION ALL SELECT '01','02','03','04','05','12'
UNION ALL SELECT '01','02','03','04','05','13'
UNION ALL SELECT '01','02','03','04','05','14'
UNION ALL SELECT '01','02','03','04','05','15'
UNION ALL SELECT '01','02','03','04','05','16'
 TB1比较TB2问题:以下语句需要修改吗,请大师指点
--创建tb1:
IF OBJECT_ID('tb1')>0
DROP TABLE tb1
GO
CREATE TABLE tb1 (ID INT IDENTITY (1,1),N01 [nvarchar](10), N02 [nvarchar](10), N03 [nvarchar](10), N04 [nvarchar](10), N05 [nvarchar](10), N06 [nvarchar](10))
GO
INSERT INTO TB1
SELECT '01','02','03','04','05','06'
UNION ALL SELECT '01','02','03','04','05','07'
UNION ALL SELECT '01','02','03','04','05','08'
UNION ALL SELECT '01','02','03','04','05','09'
UNION ALL SELECT '01','02','03','04','05','10'
GO
BEGIN TRANSACTION
ALTER TABLE tb1 ADD
R0 INT DEFAULT 0 NOT NULL,
R1 INT DEFAULT 0 NOT NULL,
R2 INT DEFAULT 0 NOT NULL,
R3 INT DEFAULT 0 NOT NULL,
R4 INT DEFAULT 0 NOT NULL,
R5 INT DEFAULT 0 NOT NULL,
R6 INT DEFAULT 0 NOT NULL
COMMIT--创建tb2:
IF OBJECT_ID('[tb2]') IS NOT NULL
DROP TABLE [tb2]
GO
CREATE TABLE [tb2] ([N01] [nvarchar](10),[N02] [nvarchar](10),[N03] [int],[N04] [int],[N05] [int],[N06] [int])
INSERT INTO [tb2]
SELECT '01','02','03','04','05','06'
UNION ALL SELECT '01','02','03','04','05','07'
UNION ALL SELECT '01','02','03','04','05','08'
UNION ALL SELECT '01','02','03','04','05','09'
UNION ALL SELECT '01','02','03','04','05','10'
UNION ALL SELECT '01','02','03','04','05','11'
UNION ALL SELECT '01','02','03','04','05','12'
UNION ALL SELECT '01','02','03','04','05','13'
UNION ALL SELECT '01','02','03','04','05','14'
UNION ALL SELECT '01','02','03','04','05','15'
UNION ALL SELECT '01','02','03','04','05','16'--SELECT * FROM [tb2]---->SQL查询如下:--第三:创建一个表值函数
IF OBJECT_ID('f_table')>0
DROP FUNCTION f_table
GO
CREATE FUNCTION f_table(@1 [nvarchar](10),@2 [nvarchar](10),@3 [nvarchar](10),@4 [nvarchar](10),@5 [nvarchar](10),@6 [nvarchar](10),@type INT)
RETURNS @r TABLE(n VARCHAR(1000))
AS
BEGIN
DECLARE @t TABLE(n [nvarchar](10))
INSERT @t 
SELECT @1 UNION ALL
SELECT @2 UNION ALL
SELECT @3 UNION ALL
SELECT @4 UNION ALL
SELECT @5 UNION ALL
SELECT @6  IF @type = 1
INSERT @r 
SELECT '%,'+LTRIM(n)+',%' FROM @t IF @type = 2
INSERT @r 
SELECT '%,'+LTRIM(a.n)+',%,'+LTRIM(b.n)+',%'
FROM @t a,@t b
WHERE a.n<b.n IF @type=3
INSERT @r 
SELECT '%,'+LTRIM(a.n)+',%,'+LTRIM(b.n)+',%,'+LTRIM(c.n)+',%'
FROM @t a,@t b,@t c
WHERE a.n<b.n AND b.n<c.n IF @type=4
INSERT @r 
SELECT '%,'+LTRIM(a.n)+',%,'+LTRIM(b.n)+',%,'+LTRIM(c.n)+',%,'+LTRIM(d.n)+',%'
FROM @t a,@t b,@t c,@t d
WHERE a.n<b.n AND b.n<c.n AND c.n<d.n IF @type=5
INSERT @r 
SELECT '%,'+LTRIM(a.n)+',%,'+LTRIM(b.n)+',%,'+LTRIM(c.n)+',%,'+LTRIM(d.n)+',%,'+LTRIM(e.n)+',%'
FROM @t a,@t b,@t c,@t d,@t e
WHERE a.n<b.n AND b.n<c.n AND c.n<d.n AND d.n<e.n
IF @type=6
INSERT @r 
SELECT '%,'+LTRIM(@1)+',%,'+LTRIM(@2)+',%,'+LTRIM(@3)+',%,'+LTRIM(@4)+',%,'+LTRIM(@5)+',%,'+LTRIM(@6)+',%'
RETURN 
END
GO--SELECT * FROM f_table(1,2,3,4,5,6,1)
--第四:游标更新tb1数据:
SET NOCOUNT ON
DECLARE @1 [nvarchar](10),@2 [nvarchar](10),@3 [nvarchar](10),@4 [nvarchar](10),@5 [nvarchar](10),@6 [nvarchar](10)
DECLARE c CURSOR FOR 
SELECT N01,N02,N03,N04,N05,N06 
FROM tb1
FOR UPDATE OF R0,R1,R2,R3,R4,R5,R6
OPEN c
FETCH c INTO @1,@2,@3,@4,@5,@6
WHILE @@FETCH_STATUS=0
BEGIN
UPDATE tb1
SET    R1 = (
           SELECT COUNT(1) 
           FROM tb2
           WHERE EXISTS(
                     SELECT 1 
                     FROM dbo.f_table(@1, @2, @3, @4, @5, @6,1)
                     WHERE PATINDEX(
                               n, ','+LTRIM(N01)+',,'+LTRIM(N02)+',,'+LTRIM(N03)+',,'+
                               LTRIM(N04)+',,'+LTRIM(N05)+',,'+LTRIM(N06)+','
                           )>0
                 )
)
       ,R2 = (
           SELECT COUNT(1) 
           FROM tb2
           WHERE EXISTS(
                     SELECT 1 
                     FROM dbo.f_table(@1, @2, @3, @4, @5, @6,2)
                     WHERE PATINDEX(
                               n, ','+LTRIM(N01)+',,'+LTRIM(N02)+',,'+LTRIM(N03)+',,'+
                               LTRIM(N04)+',,'+LTRIM(N05)+',,'+LTRIM(N06)+','
                           )>0
                 )
       )
       ,R3 = (
           SELECT COUNT(1) 
           FROM tb2
           WHERE EXISTS(
                     SELECT 1 
                     FROM dbo.f_table(@1, @2, @3, @4, @5, @6,3)
                     WHERE PATINDEX(
                               n, ','+LTRIM(N01)+',,'+LTRIM(N02)+',,'+LTRIM(N03)+',,'+
                               LTRIM(N04)+',,'+LTRIM(N05)+',,'+LTRIM(N06)+','
                           )>0
                 )
       )
       ,R4 = (
           SELECT COUNT(1) 
           FROM tb2
           WHERE EXISTS(
                     SELECT 1 
                     FROM dbo.f_table(@1, @2, @3, @4, @5, @6,4)
                     WHERE PATINDEX(
                               n, ','+LTRIM(N01)+',,'+LTRIM(N02)+',,'+LTRIM(N03)+',,'+
                               LTRIM(N04)+',,'+LTRIM(N05)+',,'+LTRIM(N06)+','
                           )>0
                 )
       )
       ,R5 = (
           SELECT COUNT(1) 
           FROM tb2
           WHERE EXISTS(
                     SELECT 1 
                     FROM dbo.f_table(@1, @2, @3, @4, @5, @6,5)
                     WHERE PATINDEX(
                               n, ','+LTRIM(N01)+',,'+LTRIM(N02)+',,'+LTRIM(N03)+',,'+
                               LTRIM(N04)+',,'+LTRIM(N05)+',,'+LTRIM(N06)+','
                           )>0
                 )
       )
       ,R6 = (
           SELECT COUNT(1) 
           FROM tb2
           WHERE EXISTS(
                     SELECT 1 
                     FROM dbo.f_table(@1, @2, @3, @4, @5, @6,6)
                     WHERE PATINDEX(
                               n, ','+LTRIM(N01)+',,'+LTRIM(N02)+',,'+LTRIM(N03)+',,'+
                               LTRIM(N04)+',,'+LTRIM(N05)+',,'+LTRIM(N06)+','
                           )>0
                 )
       )
       ,R0 = (
           SELECT COUNT(1) 
           FROM tb2
           WHERE NOT EXISTS(
                     SELECT 1 
                     FROM dbo.f_table(@1, @2, @3, @4, @5, @6,1)
                     WHERE PATINDEX(
                               n, ','+LTRIM(N01)+',,'+LTRIM(N02)+',,'+LTRIM(N03)+',,'+
                               LTRIM(N04)+',,'+LTRIM(N05)+',,'+LTRIM(N06)+','
                           )>0
                 )
       )
    WHERE CURRENT OF c
    FETCH c INTO @1,@2,@3,@4,@5,@6
END
CLOSE c
DEALLOCATE c
SET NOCOUNT OFF
SELECT * FROM tb1补充:因为TB1是与TB2一一对比,比较了特别TB2表里的m条数据,0个相同记作R0.....3次相同记作R3.....6次相同记作R6,已经比较的就不会再参与比较,那么R0+R1+R2+R3+R4+R5+R6=m,就是说R0+R1+R2+R3+R4+R5+R6=ID(MAX TB2)
对吗?