Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Połącz wiele wierszy z wielu tabel

Dziękuję za treść! O wiele lepsze niż wyrywanie zębów, aby zdobyć schemat i dane. :-) Jeśli podłączysz to do swojego zapytania gist, powinieneś zobaczyć wyniki, których szukasz (cóż, bardzo blisko - patrz poniżej).

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, '');

Wynik jest nieco inny niż prosiłeś, ale możesz to naprawić, stosując formatowanie ciągów podczas pobierania 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. Tablica danych zawierająca SqlGeometry powoduje niepowodzenie wykonywania procedury składowanej... Dlaczego?

  2. Odczyty nie spadają po umieszczeniu indeksu

  3. Jak przechowywać wartości dziesiętne w SQL Server?

  4. Utwórz zadanie agenta serwera SQL przy użyciu T-SQL

  5. Jak mogę wyświetlić usunięte rekordy z tabeli serwera sql?