2

我有一个带有这样列标题的表:

p_id|s_id|value

所以表格是这样的:

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

第一列是p_id,第二列是s_id,第三列是value

有大约 673 个不同的值p_id,大约有 6 个可能的值s_id,并且value是一个整数。每个 ( p_id, s_id) 对映射到 a value,每个有六个这样的值p_id(因为只有六个可能s_id的 's)。这里有些例子:

(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 回答