【问题标题】:Converting a table into another table with less rows?将一个表转换为另一个行数较少的表?
【发布时间】:2014-02-05 00:43:12
【问题描述】:

我在 oracle db 中有一个表,它由三个字段(名称、id、计数)组成。 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     |
+----+------+------+------+------+

我在这一点上感到震惊。有可能吗? 请帮帮我。

感谢您的帮助。

提前谢谢你。

【问题讨论】:

    标签: mysql sql oracle11g concatenation


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多