我有这张桌子:
表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来动态生成table列。
答案 0 :(得分:1)
尽管不完全像您想象的那样,但我想出了一个解决方案。基本上,您将需要在源表中创建一个名为“唯一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>
Here是我为回答您的问题而创建的SQL Fiddle查询的链接。
希望这会为您指明正确的方向:)