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!

War es hilfreich?

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

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top