Eine ausgewählte Spalte in einer einzelnen Abfrage verkettet?
-
03-07-2019 - |
Frage
Ich weiß, dass Sie das tun können, weil ich es schon einmal gesehen habe, aber ich vergesse, wo und bis jetzt ich es nicht tun musste.
Ich habe eine Tabelle namens Mitarbeiter und sie verfügt über verschiedene Mitarbeiterdaten (DUH). Ich brauche eine Abfrage, die im ersten und Nachnamen aller Zeilen in der Tabelle eine Auswahl ausgewählt und dann alle in eine von Kommas abgegrenzte Zeichenfolge einbinden.
Zum Beispiel habe ich ein paar Zeilen (viel mehr als das, aber für diese Frage nehme ich nur zwei Daten an) an Daten, die aussehen:
FName LName ------- ----- Richard Prescott Jill Sentieri Carol Winger
Ich muss ausgewählt werden, der die oben genannten Daten in diesem Formular zurückgeben kann:
Richard Prescott, Jill Sentieri, Carol Winger
Vielen Dank im Voraus für Ihre Hilfe!
Lösung
Verwenden Sie Koales. Etwas wie das:
DECLARE @Names varchar(1000)
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM Employees
Andere Tipps
Dies ist die effizienteste Methode, die ich gefunden habe. Es erfordert SQL Server, aber es klingt so, als ob Sie das verwenden.
select stuff((
select ', ' + fName + ' ' + lName
from Employees
order by lName, fName /* Optional */
for xml path('')
), 1, 2, '');
Die Idee ist, dass Sie die Möglichkeit nutzen können, einen leeren Tag -Namen für XML -Pfad ('') zu verwenden, um eine String -Verkettung über Zeilen zu erhalten. Das Zeug (..., 1,2, '') entfernt nur das führende Komma.
Das ist sehr schnell.
Sie können ein UDF schreiben, um das zu tun
CREATE FUNCTION [dbo].[fnc_GetEmpList](
@CompId numeric
) RETURNS nvarchar(1000)
BEGIN
declare @str nvarchar(1000)
set @str =''
select @str = @str + ',' + FirstName + ' ' + LastName from Employees
--remove the last comma
if(@str<>'')
set @str = right(@str,len(@str)-1)
return @str
END
Vielleicht kann das helfen. Diese Frage wurde schon einmal gestellt.Wie erstelle ich eine SQL -Serverfunktion, mit der mehrere Zeilen von einer Unterabfrage in ein einzelnes abgrenztes Feld "gekommen" werden sollen?
Wenn Sie MySQL verwenden, haben sie eine großartige Funktion namens Group_Concat, die genau das tut. http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
Das ist nicht perfekt, aber es wird dich den größten Weg dorthin bringen
declare @count int
declare @i int
declare @string nvarchar(max)
declare @name nvarchar(100)
declare @Employees (EmpName nvarchar(100), ID int identity(1,1)
insert into @Employees (EmpName)
select FirstName + ' ' + LastName
from Employees
select @count=count(*) from @Employees
set @i=1
set @string=''
while (@i<=@count)
begin
select @name = EmpName from @Employees where ID=@i
set @string = @string + ',' + @name
set @i=@i+1
end