2

テーブルには、一連の整数を持つ列が 1 つだけ含まれます。

1
2
3
4
...
20

1 つのクエリだけで 3 つの列を持つテーブルに転置することは可能ですか? したがって、結果は次のようになります。

1 2 3
4 5 6
7 8 9
...
19 20 null
4

4 に答える 4

4

試す:

with cte as
(select myCol,
        floor((row_number() over (order by myCol)-1)/3) rn,
        (row_number() over (order by myCol)-1) % 3 + 1 cn
 from myTable)
select [1],[2],[3]
from
(select * from cte) as src
 pivot
(max(myCol) 
 for cn in ([1],[2],[3])) as pvt

ここでSQLFiddle 。

于 2013-06-09T20:00:33.403 に答える
1

これを試してみてください -

DECLARE @temp TABLE (id INT)
INSERT INTO @temp (id)
VALUES 
    (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
    (11),(12),(13),(14),(15),(16),(17),(18),(19),(20)

SELECT [1], [2], [3]
FROM (
    SELECT 
          id
        , rn = (ROW_NUMBER() OVER (ORDER BY id) - 1) % 3 + 1
        , rn2 = (ROW_NUMBER() OVER (ORDER BY id) - 1) / 3
    FROM @temp
) t
PIVOT
(
    MAX(id)
    FOR rn IN ([1], [2], [3])
) pvt
于 2013-06-10T05:31:27.267 に答える
0

シーケンスによって、値が単純に 1 ずつ増加することを意味する場合は、基本的に算術演算でこれを行うことができます。

select mycol,
       (case when mycol + 1 <= maxval then mycol + 1 end),
       (case when mycol + 2 <= maxval then mycol + 2 end)
from myTable cross join
     (select min(myCol)%3 as offset,
             max(myCol) as maxval
      from myTable
     ) const
where (mycol - offset)%3 = 0;

他のソリューションはより一般的です。シーケンス内の任意の値をピボットします。これは具体的には、1 ずつ増加する数値のみをピボットします。

于 2013-06-09T20:12:33.547 に答える