Nếu bạn có bảng dữ liệu sau mà bạn muốn xoay vòng:
CREATE TABLE yourtable (id int, name varchar2(1), value varchar(10));
INSERT ALL
INTO yourtable (id, name, value )
VALUES (1, 'A', '1500')
INTO yourtable (id, name, value )
VALUES (1, 'B', '4500')
INTO yourtable (id, name, value )
VALUES (2, 'C', '3.5')
INTO yourtable (id, name, value )
VALUES (3, 'B', 'test')
INTO yourtable (id, name, value )
VALUES (4, 'A', 'blah')
INTO yourtable (id, name, value )
VALUES (4, 'C', 'hello')
SELECT * FROM dual;
Và mã hiện tại của bạn tương tự như:
select id, OptionA, OptionB, OptionC
from
(
select id, name, value
from yourtable
) src
pivot
(
max(value)
for name in ('A' as OptionA, 'B' OptionB, 'C' OptionC)
) piv
Xem SQL Fiddle với Demo . Dữ liệu mẫu sẽ tạo ra null
các giá trị.
Khi bạn muốn thay thế các null
giá trị, bạn phải thực hiện nó trong SELECT
danh sách cuối cùng . Vì vậy, mã của bạn sẽ cần phải là:
select id,
coalesce(OptionA, '0') OptionA,
coalesce(OptionB, '0') OptionB,
coalesce(OptionC, '0') OptionC
from
(
select id, name, value
from yourtable
)
pivot
(
max(value)
for name in ('A' as OptionA, 'B' as OptionB, 'C' as OptionC)
);
Xem SQL Fiddle với bản demo
NVL(column_name,0)
?