extra1, extra2, ...
là "cột bổ sung" trong thuật ngữ crosstab.
Hướng dẫn sử dụng mô-đun tablefunc
giải thích các quy tắc:
Và xa hơn nữa:
Nhấn mạnh vào các phần chính của tôi.
Bạn chỉ sắp xếp theo row_name
:
ORDER BY row_name ASC
Không quan trọng trong ví dụ đầu tiên khi bạn lọc bằng:
WHERE ... t.extra1 = 'val1' -- single quotes by me
Tất cả hàng nhập có extra1 = 'val1'
dù sao. Nhưng vấn đề quan trọng trong ví dụ thứ hai khi bạn lọc bằng:
WHERE ... t.extra1 IN('val1', ...) --> More values
Bây giờ, yêu cầu đầu tiên được in đậm ở trên bị vi phạm đối với cột phụ extra1
. Mặc dù thứ tự sắp xếp của truy vấn đầu vào đầu tiên là không xác định, các giá trị kết quả cho cột "bổ sung" extra1
được hái tùy ý. Các giá trị khác có thể có cho extra1
, càng ít hàng sẽ có 'val1':đó là những gì bạn đã quan sát thấy.
Bạn vẫn có thể làm cho nó hoạt động:để báo cáo extra1 = 'val1'
cho mọi row_name
có ít nhất một trong số đó, hãy thay đổi ORDER BY
tới:
ORDER BY row_name, (extra1 <> 'val1')
Sắp xếp 'val1' ở trên cùng. Giải thích cho boolean
đó biểu thức (với các liên kết đến nhiều hơn):
Các cột "bổ sung" khác vẫn được chọn tùy ý trong khi thứ tự sắp xếp không xác định.
Khái niệm cơ bản về Crosstab: