带有计数的数据透视表-Oracle SQL

ang

我有这张桌子:

表格1

id      e_nm            val         count
2572    Fruit Date      20180115    13
2572    Fruit Date      20180504    21
2573    Salad Date      ABC         50
2574    Test Date       20181115    14
2574    Test Date       19991001    29

该表具有每个e_nm(元素名称)及其计数的所有不同值。该表具有数千个可用值,其中包含500多个元素名称。

有没有一种方法可以像使用Pivot那样将其可视化:

id_2572     id_2572_e_nm    id_2573     id_2573_e_nm     id_2574        id_2574_e_nm
20180115    Fruit Date      ABC         Salad Date       20181115       Test Date
20180504    Fruit Date                                   19991001       Test Date

请注意,表列需要通过从table1读取id来动态生成。

米歇尔·拉·费拉(Michele La Ferla)

尽管不完全像您想象的那样,但我想出了一个解决方案。基本上,您将需要在源表中创建一个名为唯一ID的新列。这是您将要旋转表的唯一标识符。

之后,您将需要使用以下查询来获取几乎所需的输出:

SELECT * FROM
(
  SELECT 
    unique_id, 
    e_nm, 
    val
  FROM table1
)
PIVOT 
(
  listagg(val) within group (order by null) as id, listagg(e_nm) within group (order by null) as id_e_nm
  FOR e_nm IN ('Fruit Date','Salad Date','Test Date')
)

这将为您提供以下输出:

body {
    margin: 0;
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
    font-size: 14px;
    line-height: 20px;
    color: #333;
    background-color: #fff;
}
<table class="results table table-bordered table-striped">
  <tbody>
    <tr>
      <th>UNIQUE_ID</th>
      <th>'Fruit Date'_ID</th>
      <th>'Fruit Date'_ID_E_NM</th>
      <th>'Salad Date'_ID</th>
      <th>'Salad Date'_ID_E_NM</th>
      <th>'Test Date'_ID</th>
      <th>'Test Date'_ID_E_NM</th>
    </tr>
    <tr>
      <td>1</td>
      <td>20180115</td>
      <td>Fruit Date</td>
      <td>ABC</td>
      <td>Salad Date</td>
      <td>20181115</td>
      <td>Test Date</td>
    </tr>
    <tr>
      <td>2</td>
      <td>20180504</td>
      <td>Fruit Date</td>
      <td>(null)</td>
      <td>(null)</td>
      <td>19991001</td>
      <td>Test Date</td>
    </tr>
  </tbody>
</table>

是我为回答您的问题而创建的SQL Fiddle查询的链接。

希望这能为您指明正确的方向:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章