Oracle SQL транспонирует только один столбец в виде отдельных столбцов в выводе - PullRequest
0 голосов
/ 24 января 2019

Мой SQL;

    SELECT
        created_date,
        response_status,
        count
    FROM
        t_bvs_txn_response_summary
    WHERE
        created_date > SYSDATE - 1 / 24
        AND   response_status IN (
            'successful',
            'Disconnection'
        )
    ORDER BY
        1;

имеет следующий вывод;

Current Output

Я хочу взять значения в столбце response_status в отдельных столбцах и показать счетчики для каждого из них для конкретного экземпляра.

Желаемый результат будет примерно таким;

Desired Output

Я новичок в SQL, поэтому мне нужна помощь здесь.

Ответы [ 3 ]

0 голосов
/ 24 января 2019

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

   SELECT
        created_date,
        response_status,
        count,count(*) over(partition by response_status)
    FROM
        t_bvs_txn_response_summary
    WHERE
        created_date > SYSDATE - 1 / 24
        AND   response_status IN (
            'successful',
            'Disconnection'
        )
    ORDER BY
        1;
0 голосов
/ 24 января 2019

Вы можете попробовать использовать условное агрегирование

    SELECT 
      created_date,
      sum(case when response_status='successful' then count end ) as 'successful',
      sum(case when response_status='Disconnection' then count end) as 'Disconnection'
      FROM t_bvs_txn_response_summary
      WHERE created_date > SYSDATE - 1 / 24 AND response_status IN ('successful', 'Disconnection')
      group by created_date
0 голосов
/ 24 января 2019

Попробуйте PIVOT

SELECT * FROM (
     SELECT
            created_date, 
            response_status,
            nvl(count,0) as count
        FROM
            t_bvs_txn_response_summary
        WHERE
            created_date > SYSDATE - 1 / 24
            AND   response_status IN (
                'successful',
                'Disconnection'
            )
)
PIVOT
(
  SUM(count)
  FOR response_status IN ('successful', 'Disconnection')
)
        ORDER BY
            1;
...