2013-11-26 152 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語句