2

次のような列ヘッダーを持つテーブルがあります。

p_id|s_id|value

したがって、テーブルは次のようになります。

1|1|39
1|2|97
1|3|42

1 列目はp_id、2 列目はs_id、3 列目は ですvalue

には 673 個ほどの個別の値がp_idあり、 には約 6 つの可能な値がs_idあり、valueは整数です。各 ( p_id, s_id) ペアは にマップされ、valueそれぞれに 6 つの値がp_idあります (可能な は 6 つしかないためs_id)。ここではいくつかの例を示します。

(p_id, s_id, value)
(1, 1, 238), (1, 2, 489), ... (1, 6, 391),
(2, 1, 380), (2, 2, 112), ... (2, 6, 402),
. . .
(673, 1, 371), (673, 2, 239), ... (673, 6, 230)

したがって、出力として取得しようとしているものの列ヘッダーとして必要なものは次のとおりです。

p_id 1 2 3 4 5 6

そして、テーブルに「値」が入力されます。

SQL ステートメントでこれを行うにはどうすればよいですか? 新しいテーブルを作成する必要がありますか?

4

1 に答える 1

0

単純なCaseステートメントが機能します。これを試して:

SELECT    
    p_id, 
    MIN(CASE WHEN s_id = 1 THEN value END) AS [1], 
    MIN(CASE WHEN s_id = 2 THEN value END) AS [2], 
    MIN(CASE WHEN s_id = 3 THEN value END) AS [3], 
    MIN(CASE WHEN s_id = 4 THEN value END) AS [4],
    MIN(CASE WHEN s_id = 5 THEN value END) AS [5], 
    MIN(CASE WHEN s_id = 6 THEN value END) AS [6]
FROM        
    [TableName]
GROUP BY 
    p_id
于 2012-11-26T23:33:47.440 に答える