Сводная таблица с подсчетами - Oracle SQL - PullRequest
6 голосов
/ 08 мая 2019

У меня есть эта таблица:

table1

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 именами элементов.

Есть ли способ, с помощью которого я могу визуализировать это, как показано ниже:

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

Обратите внимание, что столбец таблицы должен генерироваться динамически путем чтения идентификатора из таблицы 1.

1 Ответ

1 голос
/ 14 мая 2019

Хотя не совсем так, как вы себе это представляли, я нашел решение. По сути, вам нужно будет создать новый столбец в исходной таблице с именем уникальный идентификатор. Это уникальный идентификатор, под которым вы будете поворачивать таблицу.

После этого вам нужно будет использовать следующий запрос для получения почти желаемого результата:

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, который я создал для ответа на ваш вопрос.

Надеюсь, это направит вас в правильном направлении:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...