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

ÁP DỤNG CROSS cho không gian tên, các nút con trả về các bản ghi trùng lặp

Hãy thử điều này:

;WITH XMLNAMESPACES ('http://3ecompany.com/webservices/catalogitemxml' as CI)
SELECT 
    Identifier = CI.value('(CI:ProductIdentifiers[1]/CI:Identifier)[1]', 'varchar(9)'),
    CAS_Number = Ingred.value('(CI:Cas)[1]', 'varchar(20)'),
    Chemical_Name = Ingred.value('(CI:ChemicalName)[1]', 'varchar(100)')
FROM
    @XmlTable
CROSS APPLY
    XMLData.nodes('/ArrayOfCatalogItem/CatalogItem/CI:Msds') AS XT(CI)
CROSS APPLY
    CI.nodes('CI:Ingredients') AS XT18(Ingred)

Tôi nhận được danh sách các đoạn XML cho mỗi <Msds> và từ nút này, tôi lấy ProductIdentifiers thông tin. Ngoài ra, từ nút này, tôi cũng nhận được danh sách các phân đoạn XML phụ cho <Ingredients> và nắm bắt thông tin chi tiết từ những nút này.

Đầu ra của tôi trông như thế này:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MDX Cách tính toán số đo theo thứ nguyên mà không hiển thị các thành viên trong kết quả

  2. Làm phẳng / hợp nhất các khoảng thời gian chồng chéo

  3. Nhiều hàng thành một hàng và kết hợp SQL cột

  4. SQL Server 2012 truy vấn dữ liệu Access 2007 sử dụng lỗi OPENROWSET

  5. thêm thông tin mã hóa vào kết quả của FOR XML