2016-07-01 18 views
0

クエリの結果をテーブルEmployeeに挿入する必要があります。クエリの循環結果をテーブルに挿入する

Employeeテーブルは、このように作成されます。

SELECT d.name, d.date 
FROM data d 
WHERE d.type = 'n' 
ORDER BY d.name 

このクエリは、このような何かを返します:

A  DateA 
B  DateB 
C  DateC 
D  DateD 
E  DateE 
F  DateF 
G  DateG 
H  DateH 
I  DateI 
L  DateL 
M  DateM 
N  DateN 
O  DateO 
P  DateP 
Q  DateQ 
QQ  DateQQ 
... 
...  

CREATE TABLE Employee(
         Name1 NVARCHAR(100) 
         , Date1 DATETIME 
         , Name2 NVARCHAR(100) 
         , Date2 DATETIME 
         , Name3 NVARCHAR(100) 
         , Date3 DATETIME 
         , Name4 NVARCHAR(100) 
         , Date4 DATETIME 
         , Name5 NVARCHAR(100) 
         , Date5 DATETIME 
         , Name6 NVARCHAR(100) 
         , Date6 DATETIME 
         , Name7 NVARCHAR(100) 
         , Date7 DATETIME 
        ) 

簡略化のための私のクエリがあるとしましょう

難しい部分は、各行をの内側に挿入する必要があることですこのように、テーブル:日付1

  • 第二名(B)Name2は内部内部クエリ名1内部(A)に示すように、第1日(DateA)の

    • ファーストネーム、及び第二日(DateB)日付2
    • 内部NAME3内部
    • 第3行Date3
    • .... Name7内部
    • 7行目、Day7
    • 名1と1日目内側
    • 8行目
    • NAME2さん2日目内側
    • 9行目
    • は....

    これは、すべてROW_NUM%7 = 0の後、私は名1と1日目から開始し(何とか)再びサイクルに必要であることを意味します。

    (私のEmployeeテーブル内の)期待される結果は次のようになります。

    A,DateA, B,DateB, C,DateC, D,DateD, E,DateE, F,DateF, G,DateG 
    H,DateH, I,DateI, L,DateL, M,DateM, N,DateN, O,DateO, P,DateP 
    Q,DateQ, QQ,DateQQ, R,DateR, S,DateS, T,DateT, U,DateU, V,DateV 
    W,DateW, X,DateX, Y,DateY, YY,DateYY, Z,DateZ, ZZ,DateZZ, ZZZ,DateZZZ 
    .... 
    

    私はこの事を処理するために、どのように任意のアイデアを持っていないが、私はそのテーブル内でその出力を必要とする(または7別のテーブル内のもっと役に立つことができれば)。

    私は自分自身を明確に表現することを希望します。

  • +1

    は、あなたの期待される結果は、あなたの要件を満たしているです!質問は、%7 = 0の条件を満たしていないため質問してください。 – Lucky

    +0

    サンプルデータを提供できます – Mani

    +0

    @Lucky申し訳ありませんがエラーがありました。今それは修正されています。 – Anthos89

    答えて

    0

    ストレートセットベースのアプローチを考えたり、5分で単純なループを作成するのに約30分を費やすことができます。 1つの文に

    DECLARE @Loops INT=(SELECT (COUNT(*)/7)+CASE WHEN(COUNT(*) % 7)>0 THEN 1 ELSE 0 END FROM MyOtherTable) 
    DECLARE @LoopCount INT=0 
    
    WHILE(@LoopCount <= @Loops)BEGIN 
        SET @[email protected]+1 
    
        INSERT Employee(name,date) 
        SELECT 
         name,date 
        FROM 
        (
         SELECT 
          name, 
          date, 
          InsertLoop=NTILE(@Loops) OVER(ORDER BY MyTableID)   
         FROM 
          MyOtherTable 
        )AS X 
        WHERE [email protected] 
    END 
    
    +0

    サンプルの従業員は2列のみですが、私の従業員は14列です – Anthos89

    0

    (私はLuckyを念頭に置いていたものだと思う):

    With Src As (--< Source query with RowNum and ColNum calculated through ROW_NUMBER() 
        SELECT e.name, e.date 
         ,  (ROW_NUMBER() Over (Order By Name, Date) - 1) % 7 + 1 As ColNum 
         , FLOOR((ROW_NUMBER() Over (Order By Name, Date) - 1)/7) As RowNum 
        FROM employee e 
        WHERE e.type = 'n' 
    ) 
    Select 
        Src1.Name As Name1, Src1.Date As Date1 
        , Src2.Name As Name2, Src2.Date As Date2 
        , Src3.Name As Name3, Src3.Date As Date3 
        , Src4.Name As Name4, Src4.Date As Date4 
        , Src5.Name As Name5, Src5.Date As Date5 
        , Src6.Name As Name6, Src6.Date As Date6 
        , Src7.Name As Name7, Src7.Date As Date7 
    From Src Src1 
    Left Join Src Src2 On Src1.RowNum = Src2.RowNum And Src2.ColNum = 2 
    Left Join Src Src3 On Src1.RowNum = Src3.RowNum And Src3.ColNum = 3 
    Left Join Src Src4 On Src1.RowNum = Src4.RowNum And Src4.ColNum = 4 
    Left Join Src Src5 On Src1.RowNum = Src5.RowNum And Src5.ColNum = 5 
    Left Join Src Src6 On Src1.RowNum = Src6.RowNum And Src6.ColNum = 6 
    Left Join Src Src7 On Src1.RowNum = Src7.RowNum And Src7.ColNum = 7 
    Where Src1.ColNum = 1 
    
    関連する問題