Tôi có thể thay thế null trong PIVOT bằng 0 không?


7

Tôi đang sử dụng hàm PIVOT trong Oracle và tò mò liệu tôi có thể thay thế các giá trị null bằng số không? Tôi biết tôi có thể gói toàn bộ truy vấn trong một CHỌN khác và sau đó sử dụng COALESCE cho các giá trị, nhưng tôi tò mò nếu có một phím tắt.


1
NVL(column_name,0)?
Phil

1
Không có tên "cột", mỗi se, trong hàm PIVOT. Điều này sẽ hoạt động nếu tôi bọc toàn bộ truy vấn; Tôi tự hỏi nếu có một sự thay thế.
JHFB

Câu trả lời:


8

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 nullcác giá trị.

Khi bạn muốn thay thế các nullgiá trị, bạn phải thực hiện nó trong SELECTdanh 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


1
Vì vậy, bạn đang gói truy vấn trục và sử dụng kết hợp như được mô tả bởi OP trong câu hỏi. Có lẽ bạn cũng muốn giải quyết phần 2 - tức là '... tò mò nếu có lối tắt.'
maxschlepzig
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.