我有一个包含列标题的表格,如下所示:
p_id|s_id|value
所以表格就像:
1|1|39
1|2|97
1|3|42
第一列是p_id
,第二列是s_id
,第三列是value
。
p_id
有673个左右不同的值,s_id
有大约6个可能的值,value
是整数。
每个(p_id
,s_id
)对映射到value
,每个p_id
有六个值(因为只有六个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语句执行此操作?我需要制作一张新桌子吗?
答案 0 :(得分: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