Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để đi về một cột có các giá trị khác nhau trong cùng một hàng trong sql?

Liên quan đến các ý kiến ​​trước đây về thiết kế bảng - trên thực tế, có một sự dư thừa trong bảng; bạn có thể lưu trữ tên trống trong một bảng khác, mà bạn sẽ kết hợp với bảng của mình ở đây để tránh điều đó; mọi sự dư thừa đều tiềm ẩn mâu thuẫn.Tuy nhiên, nếu chúng ta có một thiết kế bảng được tối ưu hóa cho việc truy vấn và giảm thiểu các phép nối cần thiết, nó có thể được điền vào một công việc hàng loạt từ một nơi khác và khi đó thiết kế sẽ phù hợp.

Những gì bạn muốn làm ở đây thường được gọi là 'xoay vòng theo chiều ngang'. tùy thuộc vào việc đó là hàng đầu tiên hay hàng thứ hai cho cùng một empno. Đó là lý do tại sao chúng tôi tạo ra một số thứ tự. Cuối cùng, chúng tôi sử dụng biểu thức SUM (CASE seq WHEN ...) kết hợp với GROUP BY để giảm số hàng và làm phẳng bảng.

Đây là:

-- first global table expression - the input table
-- The table could exist already, and then this would not be needed.
WITH foo(empno,empname,loanref,amount) AS (
          SELECT  1,'abc',123,100
UNION ALL SELECT  1,'abc',456,200
)
-- second global table expression - add sequence number
-- this needs to be in the query
,    foo_numbered AS (
SELECT
  -- need a number: 1 for the first, 2 for the second loan
  ROW_NUMBER() OVER(PARTITION BY empname ORDER BY loanref) AS seq
, *
FROM foo
)
SELECT
  empno
, empname
, MAX(CASE seq WHEN 1 THEN loanref END) AS loanref_1
, SUM(CASE seq WHEN 1 THEN amount END) AS amount_1
, MAX(CASE seq WHEN 2 THEN loanref END) AS loanref_2
, SUM(CASE seq WHEN 2 THEN amount END) AS amount_2
FROM foo_numbered
GROUP BY
  empno
, empname
;

Chúc bạn chơi vui vẻ

Marco




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thay đổi cột đổi tên bảng trong cơ sở dữ liệu oracle

  2. Làm cách nào để chỉnh sửa BLOB (chứa JSON) trong Oracle SQL Developer?

  3. truy xuất dữ liệu thô dài vào biến clob

  4. Cách tôi xóa các bản sao khỏi listagg

  5. <SQL> Cách thay đổi kích thước VARCHAR2 của bảng