2016-05-26 3 views

答えて

1

これは、仕事をするだろうが、やりたいことは非常に奇妙なことのように思えるので、私はおそらく何かが足りないのですか?

CREATE TABLE #table (col1 CHAR(1), col2 INT); 
INSERT INTO #table SELECT 'A', 1; 
INSERT INTO #table SELECT 'B', 1; 
INSERT INTO #table SELECT 'C', 1; 
INSERT INTO #table SELECT 'B', 2; 
INSERT INTO #table SELECT 'C', 4; 
INSERT INTO #table SELECT 'A', 2; 
INSERT INTO #table SELECT 'A', 6; 

WITH Ranked AS (
    SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) AS rank_id 
    FROM 
     #table), 
Numbers AS (
    SELECT 1 AS number 
    UNION ALL 
    SELECT number + 1 FROM Numbers WHERE number < 50) 
SELECT 
    MAX(CASE WHEN col1 = 'A' THEN col2 END) AS [A], 
    MAX(CASE WHEN col1 = 'B' THEN col2 END) AS [B], 
    MAX(CASE WHEN col1 = 'C' THEN col2 END) AS [C] 
FROM 
    Numbers n 
    INNER JOIN Ranked r ON r.rank_id = n.number 
GROUP BY 
    n.number; 

結果は以下のとおりです。

A B C 
1 1 1 
2 2 4 
6 NULL NULL 
1

はあなたが凝集することなく旋回するようにしようとしているように見えますか?ここでは別のオプションは次のとおりです。

select A, B, C from 
(select col1, col2, dense_rank() over (partition by col1 order by col2) dr from #table) t 
pivot 
(max(t.col2) for t.col1 in (A, B, C)) pvt; 

はまた、より多くの例/議論のためにこれをチェックアウト:TSQL Pivot without aggregate function

+1

はい、私は私の答えの最後に着いた後、これは単なるPIVOTなければならないことを実現したが、その後I DIはこれよりずっと良い答えだと思っています。数字の表はありません。 –

関連する問題