x
select to_char(a.insertdatetime) as insertdatetime , b.category, count(1) as count
from daily a
, server b
where status != 'OK'
group by b.category
, to_char(a.insertdatetime)
order by to_char(a.insertdatetime)
, b.category;
But I want the category to become a column and the count become data for each category.
I use this in Oracle
Advertisement
Answer
You can use the PIVOT
as following:
SELECT * FROM
(
select to_char(a.insertdatetime) as insertdatetime , b.category
from daily a, server b where status != 'OK'
)
PIVOT
(
COUNT(1) FOR category IN (1 AS "1", 2 AS "2", 3 AS "3", 4 AS "4", 5 AS "5")
)
ORDER BY insertdatetime;
— Update —
Your original query should have '
around the values in the IN
clause of the PIVOT
clause as follows:
SELECT
*
FROM
(
SELECT
TO_CHAR(A.INSERTDATETIME) AS INSERTDATETIME,
B.CATEGORY
FROM
DAILY A,
SERVER B
WHERE
STATUS != 'OK'
) PIVOT (
COUNT ( 1 )
FOR CATEGORY
IN ( 'ELASTIC' AS "ELASTIC", 'IS' AS "IS", 'IS_BPM' AS "IS_BPM", 'TC' AS "TC", 'UM' AS "UM" )
)
ORDER BY
INSERTDATETIME;
Cheers!!