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

Truy vấn đệ quy cho hóa đơn vật liệu

Tôi nghĩ rằng logic của bạn về cơ bản là ổn. Đây là hai cải tiến. Đầu tiên, cấp độ tăng dần để bạn có thể thấy điều gì xảy ra với đệ quy. Thứ hai, nó sử dụng một phép nối rõ ràng:

With BMStudy as (
      select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
      from BM010115 bm
      where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''
      UNION ALL
      select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
      from BMStudy ba join
           BM010115 bb
           on ba.cpn_i = bb.ppn_i
      where bb.BOMNAME_I like ''
     )
select * from BMStudy;

Tôi nghi ngờ vấn đề của bạn là điều kiện where bb.BOMNAME_I like '' . Có thể giá trị này thực sự là NULL không thay vì để trống?

Bạn cũng nên kiểm tra xem truy vấn một cấp, không đệ quy này làm gì:

      select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
      from BM010115 ba join
           BM010115 bb
           on ba.cpn_i = bb.ppn_i
      where bb.BOMNAME_I like '' and
            (ba.PPN_I like '0123105-HWT' and ba.BOMNAME_I like '')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. So sánh các chuỗi được phân tách bằng dấu phẩy trong SQL

  2. Các loại con trỏ máy chủ SQL - Con trỏ tĩnh trong SQL Server là gì | Hướng dẫn sử dụng SQL Server / TSQL

  3. Lỗi SQL Server trên lệnh cập nhật - Đã xảy ra lỗi nghiêm trọng trên lệnh hiện tại

  4. Tầm quan trọng của nhật ký giao dịch trong SQL Server

  5. Cập nhật chuỗi con của một cột