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

Nối nhiều hàng từ nhiều bảng

Cảm ơn bạn về ý chính! Tốt hơn nhiều so với việc nhổ răng để lấy lược đồ và dữ liệu. :-) Nếu bạn cắm điều này vào truy vấn chính của mình, bạn sẽ thấy kết quả bạn đang theo dõi (tốt, rất gần - xem bên dưới).

DECLARE @SalesRepID INT, @SurgeonID INT, @LocationID INT;
SELECT @SalesRepID = 2, @SurgeonID = 1, @LocationID = 1;

;WITH x AS 
(
  SELECT CommissionPercent, Categories = STUFF((SELECT ', ' 
      + tCat.Category FROM #tCategories AS tCat 
      INNER JOIN #tCommissions AS tCom 
      ON tCat.CategoryID = tCom.CategoryID
      WHERE tCom.CommissionPercent = com.CommissionPercent
      FOR XML PATH, TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') 
 FROM #tCommissions AS com
 WHERE SalesRepID = @SalesRepID
 AND SurgeonID = @SurgeonID
 AND LocationID = @LocationID
),
y AS
(
  SELECT s = RTRIM(CommissionPercent) + ' (' + Categories + ')' 
  FROM x GROUP BY CommissionPercent, Categories
)
SELECT Result = STUFF((SELECT ', ' + s FROM y 
  FOR XML PATH, TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '');

Kết quả hơi khác so với yêu cầu của bạn, nhưng bạn có thể khắc phục điều đó bằng cách áp dụng định dạng chuỗi khi kéo CommissionPercent.

Result
--------------------------------------------------------
0.05 (Shirts, Shoes, Dresses), 0.10 (Hats), 0.15 (Pants)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo sử dụng SQL Server với Salesforce SOQL

  2. Là một hàm có giá trị bảng có thể cập nhật được

  3. Cách bật tất cả các ràng buộc kiểm tra trong cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 88

  4. Bạn nên chọn kiểu dữ liệu MONEY hay DECIMAL (x, y) trong SQL Server?

  5. Làm thế nào để thực thi một thủ tục được lưu trữ MSSQL với Thư viện PHP ADOdb?