Xin chào, tôi cần trợ giúp để hiểu phần giải mã của truy vấn giống như sau.ORDER BY DECODE (BLAH, [COLUMN NUMBER]) trên một truy vấn cột đơn. Làm thế nào nó hoạt động?
SELECT ax.animal_code
FROM raw_animal_xref ax,
animal_xref_type axt
WHERE ax.animal_mnemonic = l_animal_mnemonic -- Example 'COUGAR'
AND ax.animal_code_type = axt.animal_code_type
ORDER BY DECODE (animal_type,
l_type_to_be_matched, -1, -- Example 'CATS'
l_current_type, 0, -- Example 'BIG CATS'
nvl(axt.type_search_priority, 100)) ASC; -- EXAMPLE 'Big Cats' Priority is 1
Vì truy vấn này chỉ trả về 1 truy vấn, tôi hơi bối rối về cách ORDER BY hoạt động với các số cột không tồn tại khác nhau do DECODE cung cấp. Truy vấn hoạt động như một con trỏ để tìm một mã duy nhất cho con vật được đề cập cho một động vật ghi nhớ loại động vật hiện tại và loại được so khớp với. Tôi nghĩ rằng DECODE trả về các số cột khác nhau để ORDER BY với và tôi đã thử nghiệm với một cột đơn giản khác nhau chọn trên một số bảng khác với ORDER bởi '-1', '0' và '100' và ORDER bởi dường như thất bại cho 0 và 100. Tại sao nó hoạt động với -1 hoặc bất kỳ số nào khác?
Hy vọng ai đó có thể giải thích điều này với tôi. Cảm ơn!
Cảm ơn bạn đã trả lời! Vì vậy, nó có nghĩa là nếu hàng hiện tại là một COUGAR IE BIG CAT, nó sẽ được thiết lập là 0 mà sẽ luôn luôn đặt nó trong hàng thứ 2 trở đi và khi tôi gặp phải một "Mèo trong nước" hàng IE "CAT" loại nó sẽ được thiết lập như -1 IE nó sẽ được trên đầu trang của thiết lập của tôi. Và nếu tôi đang trên một hàng mà không có bất kỳ search_priority, nó sẽ được ở dưới cùng của danh sách IE 100. Là sự hiểu biết của tôi đúng? – Azeworai
có, đó là ý tưởng. Dưới đây là một bài đăng khác mô tả việc thực hiện tương tự: http://www.orindasoft.com/public/blog/2007/07/oracles-decode-funtion.html –