2016-09-09 1 views
0

Ich habe zwei Tabellen, wo ich beiden beitrug, um die erste Ansicht zu erhalten, danach möchte ich GROUP_CONCAT in einer Spalte tun, aber wir haben diese Funktion nicht in SQL Server .Concat mehrere Zeilen mit dynamischer Tabelle in SQL Server

Also habe ich hier einige Beispiele versucht, aber war mit meinem SQL nicht erfolgreich. Die gefundenen Beispiele verwenden immer eine Tabelle, um GROUP_CONCAT zu generieren, aber ich habe kein Beispiel mit einem SQL-Ergebnis gefunden.

TableA:

| CityID | MasterID | Account | 
+-----------------------------+ 
| 01 | 1234 | 1111 | 
| 01 | 1234 | 2222 | 
| 01 | 1234 | 3333 | 
| 02 | 1234 | 4444 | 

TableB:

| Account | Item | Price | 
+------------------------+ 
| 1111 | A001 | 11,11 | 
| 2222 | A001 | 11,11 | 
| 3333 | A002 | 22,22 | 
| 4444 | A002 | 22,22 | 
| 5555 | A002 | 22,22 | 

Erste SQL - Subselect:

SELECT * 
FROM TableA, TableB 
WHERE TableA.AccountID = TableB.AccountID 

Ausgang:

| CityID | MasterID | Account | Account | Item | Price | 
+------------------------------------------------------+ 
| 01 | 1234 | 1111 | 1111 | A0001 | 11,11 | 
| 01 | 1234 | 2222 | 2222 | A0001 | 11,11 | 
| 01 | 1234 | 3333 | 3333 | A0002 | 22,22 | 
| 02 | 1234 | 4444 | 4444 | A0002 | 22,22 | 

Zweite SQL - letzte Ansicht:

SELECT 
    MasterID, GROUP_CONCAT(Item) 
FROM 
    (SELECT * 
    FROM TableA, TableB 
    WHERE TableA.AccountID = TableB.AccountID) table01 

Ausgang:

| MasterID | Item | 
+-----------------+ 
| 1234 | A0001,A002 | 
+0

[Schlechte Angewohnheiten zu treten: Verwenden von alten JOINs] (http://sqlblog.com/blogs/a aron_bertrand/archive/2009/10/08/bad-gewohnheiten-zu-kick-using-old-style-joins.aspx) - diese alte * durch Kommas getrennte Liste von Tabellen * style wurde durch die * richtige * ANSI ersetzt 'JOIN'-Syntax im ANSI - ** 92 ** SQL-Standard (** vor mehr als 20 Jahren **) und deren Verwendung wird abgeraten –

Antwort

0

Dies wird Ihnen Ergebnis erwartet (ich bin als Spaltennamen Konto anstatt AccountId wie das ist, was Sie erwähnt in der Tabellenstruktur)

;WITH table01 
AS 
(
    SELECT A.CityId,A.MasterId,A.Account Account1,B.Account Account2,B.Item,B.Price 
    FROM TableA A 
    INNER JOIN TableB B 
    ON A.Account = B.Account 
) 

SELECT A.MasterId, 
STUFF((SELECT ', ' + B.ITEM 
     FROM table01 B 
     WHERE B.MasterId = A.MasterId 
     group by B.MasterId,B.Item 
     FOR XML PATH('') 
    ), 1, 2, '') Item 

FROM table01 A 
GROUP BY A.MasterId