Ich versuche, zwei Tabellen abzufragen und Ergebnisse wie die folgenden zu erhalten:
Section Names
shoes AccountName1, AccountName2, AccountName3
books AccountName1
Die Tabellen sind:
CREATE TABLE dbo.TableA(ID INT, Section varchar(64), AccountId varchar(64));
INSERT dbo.TableA(ID, Section, AccountId) VALUES
(1 ,'shoes','A1'),
(2 ,'shoes','A2'),
(3 ,'shoes','A3'),
(4 ,'books','A1');
CREATE TABLE dbo.TableB(AccountId varchar(20), Name varchar(64));
INSERT dbo.TableB(AccountId, Name) VALUES
('A1','AccountName1'),
('A2','AccountName2'),
('A3','AccountNAme3');
Ich habe einige Fragen beantwortet, die besagten, dass "XML PATH" und "STUFF" verwendet werden sollen, um die Daten abzufragen und die gewünschten Ergebnisse zu erhalten, aber ich denke, es fehlt etwas. Ich habe die folgende Abfrage versucht und erhalte die Fehlermeldung:
Die Spalte 'a.AccountId' ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.
Ich habe es nicht in der SELECT-Klausel einer der Abfragen, aber ich gehe davon aus, dass der Fehler darin besteht, dass AccountId in Tabelle A nicht eindeutig ist.
Hier ist die Abfrage, die ich gerade versuche, um richtig zu arbeiten.
SELECT section, names= STUFF((
SELECT ', ' + Name FROM TableB as b
WHERE AccountId = b.AccountId
FOR XML PATH('')), 1, 1, '')
FROM TableA AS a
GROUP BY a.section