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

Làm thế nào để tự nối bảng theo cách mà mọi bản ghi được nối với bản ghi trước đó?

Một tùy chọn là sử dụng cte đệ quy (nếu tôi hiểu đúng yêu cầu của bạn):

WITH RNCTE AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date) rn
        FROM quotes
  ),
CTE AS (
  SELECT symbol, date, rn, cast(0 as decimal(10,2)) perc, closed
  FROM RNCTE
  WHERE rn = 1
  UNION ALL
  SELECT r.symbol, r.date, r.rn, cast(c.closed/r.closed as decimal(10,2)) perc, r.closed
  FROM CTE c 
    JOIN RNCTE r on c.symbol = r.symbol AND c.rn+1 = r.rn
  )
SELECT * FROM CTE
ORDER BY symbol, date

SQL Fiddle Demo

Nếu bạn cần tổng số tiền đang chạy cho mỗi biểu tượng để sử dụng làm tỷ lệ phần trăm thay đổi, thì đủ dễ dàng để thêm một cột bổ sung cho số tiền đó - không hoàn toàn chắc chắn về ý định của bạn, vì vậy phần trên chỉ chia số tiền đã đóng hiện tại cho số tiền đã đóng trước đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn Bản ghi nhiều lần từ bảng

  2. Làm cách nào để tìm hiểu ràng buộc FOREIGN KEY nào tham chiếu đến bảng trong SQL Server?

  3. Cách sử dụng hàm IDENTITY () trong SQL Server

  4. Cách tạo nhiều cái cho một cái

  5. Tập bản ghi được đóng sau khi thực hiện thủ tục đã lưu trữ