将表转换为具有较少行的另一个表?

时间:2014-01-16 07:54:59

标签: mysql sql oracle11g concatenation

我在oracle db中有一个表,它包含三个字段(name,id,count)。 Id范围从1到4都包括。

例如,表中的数据类似于以下

+----+--+-----+
|Name|Id|Count|
+----+--+-----+
|A   |2 |5    |
+----+--+-----+
|A   |3 |15   |
+----+--+-----+
|B   |1 |10   |
+----+--+-----+
|B   |2 |12   |
+----+--+-----+
|B   |4 |6    |
+----+--+-----+

现在我的问题是使表格如下,如头部分中的名称和ID以及它们在相应位置的计数。

上面示例表的结果如下所示。

+----+------+------+------+------+
|Name|Id(=1)|Id(=2)|Id(=3)|Id(=4)|
+----+------+------+------+------+
|A   |0     |5     |15    |0     |
+----+------+------+------+------+
|B   |10    |12    |0     |6     |
+----+------+------+------+------+

我很震惊。有可能吗? 请帮帮我。

感谢你的帮助。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您需要透视隔离。您可以在语句中使用case when ..

select 
 name,
 case `id` 
   when 1 then `count` else 0 end as 'id=1',
 case `id` 
   when 2 then `count` else 0 end as 'id=2',
 ...
from my_table

您还可以使用if(...功能:

select 
 name,
 if(`id`=1, `id`, 0 ) as 'id=1',
 if(`id`=2, `id`, 0 ) as 'id=2',
 ...
from my_table