none
SQL insert into select 迴圈寫法 RRS feed

  • 問題

  • 請教該如何寫

    範例如下

    欄位1 欄位2 欄位3
    11 YY 09
    22 YY 09
    22 GG 07
    33 YY 09

    要將上資料insert 到另一個table 並新增一欄位 dateadd(day, 1,'日期)
    dateadd(day,1,'日期) 需根據欄位1 假設同個號碼有多筆需依序+1

    想要結果如下

    欄位1 欄位2 欄位3 欄位4
    11 YY 09 2019/10/05
    22 YY 09 2019/10/05
    22 GG 07 2019/10/06
    33 YY 09 2019/10/05
    2019年10月5日 下午 12:50

所有回覆

  • 不曉得是不是你要的結果,基本上應該可以用一個查詢就可以完成,不妨參考看看。

    create table t1(c1 char(2), c2 char(2), c3 char(2));
    
    insert into t1(c1,c2,c3) values ('11','YY','09'),('22','YY','09'),('22','GG','07'),('22','AA','08'),('33','YY','09'),('33','ZZ','14');
    
    create table t2(c1 char(2), c2 char(2), c3 char(2),c4 date);
    
    insert into t2
    select c1,c2,c3,
    dateadd(day,row_Number() over(partition by c1 order by c1),getdate()) c4
    from t1;
    
    select *
    from t1;
    
    select *
    from t2;


    | SQL PASS Taiwan Page | SQL PASS Taiwan Group

    | My Blog

    2019年10月7日 上午 08:35
    版主
  • 您的範例資料,無法判斷資料的前後順序
    也就無法決定當欄位1相同時,哪一筆是+0,哪一筆是+1
    為了區別,我先自作主張的加上個自動編號的ID,這樣,數字小的是較早的資料,數字大的是較新的資料

    ID, F1, F2, F3

    1 ,11 ,YY ,09
    2 ,22 ,YY ,09
    3 ,22 ,GG ,07
    4 ,33 ,YY ,09
    5 ,33 ,AA ,10
    6 ,33 ,BB ,11
    7 ,33 ,CC ,12
    8 ,44 ,BB ,11
    9 ,44 ,BB ,08

    有了明確的先後順序『ID』,也有分組的依循『F1』
    ,我們就可以下語法,讓他依據『F1』分組,並依據『ID』排序

    SELECT 
    	ROW_NUMBER() OVER(PARTITION BY F1 ORDER BY ID) AS ROWID
    	,*
    FROM TT1

    醬子就可以得到依據F1分組,ID排序的編號像以下這樣子

    ROWID, ID, F1, F2, F3
    1	,1	,11	,YY	,09
    1	,2	,22	,YY	,09
    2	,3	,22	,GG	,07
    1	,4	,33	,YY	,09
    2	,5	,33	,AA	,10
    3	,6	,33	,BB	,11
    4	,7	,33	,CC	,12
    1	,8	,44	,BB	,11
    2	,9	,44	,BB	,08

    讓ROWID-1,再加上你要的日期,就是您所想要的

    SELECT ID, F1, F2, F3, DateAdd(day, ROWID-1, CONVERT(date,'2019/10/5')) AS F4
    FROM
    (
    	SELECT 
    		ROW_NUMBER() OVER(PARTITION BY F1 ORDER BY ID) AS ROWID
    		,*
    	FROM TT1
    ) V1
    

    醬子後,資料就變成

    ID, F1, F2, F3, F4
    1	,11	,YY	,09	,2019-10-05
    2	,22	,YY	,09	,2019-10-05
    3	,22	,GG	,07	,2019-10-06
    4	,33	,YY	,09	,2019-10-05
    5	,33	,AA	,10	,2019-10-06
    6	,33	,BB	,11	,2019-10-07
    7	,33	,CC	,12	,2019-10-08
    8	,44	,BB	,11	,2019-10-05
    9	,44	,BB	,08	,2019-10-06


    最後,改成Insert INTO這部分,還差一步,您應該可以吧

    ^_^


    topcat(姍舞之間的極度凝聚)
    http://www.dotblogs.com.tw/topcat
    世界上有兩樣東西分享給別人後,不但不會變少,還會變更多:
    一個是快樂,另一個是知識~ 分享...是知識累積的開始...


    2019年10月7日 上午 08:42