2016-11-06 6 views
1

私はこのようなテーブルがあります。列の値に基づいて1つの列に複数の列の表を表示するにはどうすればよいですか?

main table 今、私は以下のように、これらのデータを表示することができ、クエリを書きたい:

desire result

私はこれをどのように行うことができますか?誰でも助けてくれますか?このクエリを記述するために

+7

... SQL-Serverは、* *列グループでResultSetを許可しない、のようなものを持っていますa *メタヘッダ* ...(少なくとも埋め込みコンテキストでこの結果セットを使用する場合は),,,,,,,,同じ列名を繰り返し使用することはできません。 – Shnugo

+3

** **:写真を挿入しないでください!誰かがあなたを手伝ってくれると思ったら、手動でデータを入力しなければなりませんでした。 [MCVEの作成方法](http://stackoverflow.com/help/mcve/) – Shnugo

+0

@Shnugoありがとうございました。私の質問について知っていれば、ヘッダーを削除し、私に答えてください。私はちょうどヘッダーではなく、データを必要とします – Mohsen

答えて

0
SELECT Grade AS ISG, 
      P1AR, P1SM1, P1SM2, 
      P2AR, P2SM1, P2SM2, 
      P3AR, P3SM1, P3SM2 
    FROM 
    (
      SELECT Grade, 
        col = 'P' + CAST(Process AS NVARCHAR) +col, 
        value 
      FROM yourTable 

      CROSS APPLY 
      (
       VALUES 
       ('AR', AR), 
       ('SM1', SM1), 
       ('SM2', SM2) 
      ) c(col, value) 
    ) d 
    PIVOT 
    (
      MAX(value) 
      FOR col IN (P1AR, P1SM1, P1SM2, 
         P2AR, P2SM1, P2SM2, 
         P3AR, P3SM1, P3SM2) 
    ) piv 
0

別の方法である:これは、より良いプレゼンテーション層で解決され

SELECT 
a.Grade AS ISG, 
a.AR AS P1AR, 
a.SM1 AS P1SM1, 
a.SM2 AS P1SM2, 

b.AR AS P2AR, 
b.SM1 AS P2SM1, 
b.SM2 AS P2SM2, 

c.AR AS P3AR, 
c.SM1 AS P3SM1, 
c.SM2 AS P3SM2  
FROM yourTable a 
INNER JOIN yourTable b 
ON  a.Grade = b.Grade 
INNER JOIN yourTable c 
ON  a.Grade = c.Grade 

where a.Process = 1 and 
     b.Process = 2 and 
     c.Process = 3 
関連する問題