2013-11-26 154 views
-1

我有一个表,它由许多列组成,其中两个是group_id和access_id.Now 问题是由于记录不一致造成的,如下所示 - 记录格式为的SQL查询更新单表

group_id access_id 

100  1, 
200  1, 
300  1, 
400  1, 
100  2, 
200  2, 
300  2, 
400  2, 
100  3, 
400  3, 
100  4, 
300  4, 

所以你可以看到有在表中的记录没有进入(group_id,access_id)-> (200,3),(300,3),(200,4),(400,4) .. 有群体的数目不详的数据是生产服务器上和每个group_id 1至12 access_id。 所以我需要形成一个查询,插入缺席对(group_id,access_id)的所有记录。 - (对不起,我可怜的编辑技巧)

+0

欢迎StackOverflow上:如果您发布的代码,XML或数据样本,** **请在高亮文本编辑器的线,然后单击“代码示例”编辑器工具栏上的按钮(“{}”)以良好的格式和语法突出显示它! –

+1

你有没有尝试过什么? –

回答

0
CREATE PROCEDURE EXAMPLE 
    ( 
     @accessid_range INT 
    ) 
    AS 
    BEGIN 

     CREATE TABLE #LocalTempTable(group_id_temp INT, frequency INT) 
     INSERT INTO #LocalTempTable(group_id_temp, frequency) 
     (SELECT group_id,COUNT(group_id) AS frequency FROM SAMPLE2 GROUP BY group_id HAVING COUNT(group_id)<4); 
     --SELECT * FROM #LocalTempTable; 

     --SELECT group_id, access_id from SAMPLE2 WHERE group_id IN 
     --(SELECT group_id_temp FROM #LocalTempTable) GROUP BY group_id, access_id; 

     DECLARE @GROUPID INT 
     DECLARE GROUPIDs CURSOR LOCAL FOR SELECT group_id_temp FROM #LocalTempTable; 

     OPEN GROUPIDs 
      FETCH NEXT FROM GROUPIDs into @GROUPID 
       WHILE @@FETCH_STATUS = 0 
        BEGIN 
         --PRINT(@GROUPID) 
    --*********************************************************************************************************************** 
         DECLARE @ACCESSID INT, 
           @COUNTER INT=1; 
         DECLARE ACSESSIDs CURSOR LOCAL FOR SELECT access_id FROM SAMPLE2 WHERE [email protected] ORDER BY access_id; 

         OPEN ACSESSIDs 
          FETCH NEXT FROM ACSESSIDs into @ACCESSID 
           WHILE (@COUNTER <[email protected]_range) 
            BEGIN 
             --PRINT(@ACCESSID); 

              IF(@ACCESSID != @COUNTER) 
               INSERT INTO SAMPLE2 VALUES(@GROUPID,@COUNTER) 

             SET @COUNTER = @COUNTER + 1 
             FETCH NEXT FROM ACSESSIDs INTO @ACCESSID 
            END 
         CLOSE ACSESSIDs 
         DEALLOCATE ACSESSIDs 
    --************************************************************************************************************************* 
         FETCH NEXT FROM GROUPIDs into @GROUPID 
        END 
     CLOSE GROUPIDs 
    END 
+0

游标需要太多的负载 – Nisha

2
INSERT INTO yourTable 
SELECT group_id, t.x AS access_id 
FROM yourTable CROSS JOIN 
(
SELECT p.x FROM 
(
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12) 
) P(x) 
) AS t 
EXCEPT 
SELECT group_id, access_id FROM yourTable 

试试这个代码真实表名称替换yourTable。和第一次提交INSERT语句看到的结果SELECT语句