2016-06-23 5 views
-3

SQL手続きなしで列を転置する方法。私は</p> <p><a href="https://i.stack.imgur.com/AZA2r.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/AZA2r.png" alt="Original table"></a></p> <p>は今、私は次のようなこのテーブルを転置する必要が下図のように値を保存するSQLテーブルを持っている

Transposed table

私は、ストアドプロシージャを使用せずにこれを実行する必要があります。 2番目のテーブルを4 datagridviewのチェックボックスの列にバインドしようとしています。

+2

あなたは 'PIVOT'について学ぶことができます。いくつかのコードを試してみて、ここに戻ってください – techspider

+0

「SQLを使用せずにこれを行う必要があります。 –

+0

申し訳ありません。私は、新しいストアドプロシージャや一時テーブル、カーソルなどを書かずにこれをやりたかったのです。今私の質問を編集しました。私は今、SQLのピボットを学んでいます。しかし、これはピボットテーブルでも難しいようです。 – Saranya

答えて

1

これは、あなたがしようとC2で自分の価値観は、常にあなたのデータセットが比較的大きい場合もCROSS JOINを使用して注意してください[MP], [KL], [OL], [IFL]をするつもりはないされている場合は、それを動的にする必要があるかもしれませんが動作するはずです:

サンプルデータ:

IF OBJECT_ID('tempdb..#temp') IS NOT NULL 
    DROP TABLE #temp; 

CREATE TABLE #temp(C1 INT 
       , C2 VARCHAR(10)); 

INSERT INTO #temp 
VALUES 
     (1 
    , 'MP'), 
     (2 
    , 'KL'), 
     (3 
    , 'OL'), 
     (3 
    , 'IFL'); 

QUERY:

SELECT DISTINCT 
     C1 
    , [MP] = CASE 
       WHEN [MP] = C1 THEN 'TRUE' 
       ELSE '' 
      END 
    , [KL] = CASE 
       WHEN [KL] = C1 THEN 'TRUE' 
       ELSE '' 
      END 
    , [OL] = CASE 
       WHEN [OL] = C1 THEN 'TRUE' 
       ELSE '' 
      END 
    , [IFL] = CASE 
       WHEN [IFL] = C1 THEN 'TRUE' 
       ELSE '' 
      END 
FROM #temp AS A 
     CROSS JOIN 
       (SELECT [MP] 
        , [KL] 
        , [OL] 
        , [IFL] 
       FROM 
        (SELECT C1 
         , C2 
        FROM #temp) AS SourceTable PIVOT(MAX(C1) FOR C2 IN([MP] 
                   , [KL] 
                   , [OL] 
                   , [IFL])) AS PivotTable) AS B; 

結果:

enter image description here

関連する問題

 関連する問題