문제

나는 당신이 이것을 할 수 있다는 것을 알고 있습니다. 왜냐하면 나는 그것이 전에 한 번만한 것을 보았 기 때문입니다. 그러나 지금까지 나는 그것을 할 필요가 없었습니다.

직원이라는 테이블이 있으며 다양한 직원 데이터 (DUH)가 있습니다. 테이블에있는 모든 행의 첫 번째 및 성에서 선택을 선택한 다음 모든 행을 쉼표로 구분 된 문자열로 오염시키는 쿼리가 필요합니다.

예를 들어, 나는 몇 개의 행이 있습니다 (실제로 그보다 훨씬 더 많지만이 질문을 위해서는 두 가지만 가정).

FName    LName
-------  -----
Richard  Prescott
Jill     Sentieri
Carol    Winger

앞서 언급 한 데이터를이 형식으로 반환 할 수있는 선택이 필요합니다.

Richard Prescott, Jill Sentieri, Carol Winger

당신의 도움에 미리 감사드립니다!

도움이 되었습니까?

해결책

Coalesce를 사용하십시오. 이 같은:

DECLARE @Names varchar(1000)
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM Employees

다른 팁

이것은 내가 찾은 가장 효율적인 방법입니다. SQL Server가 필요하지만 사용하는 것 같습니다.

select stuff((
    select ', ' + fName + ' ' + lName
    from Employees
    order by lName, fName /* Optional */
    for xml path('')
), 1, 2, '');

아이디어는 XML 경로 ( '')와 함께 빈 태그 이름을 사용하여 줄을 가로 질러 문자열 연결을 얻는 기능을 활용할 수 있다는 것입니다. 물건 (..., 1,2, '')는 주요 쉼표를 제거합니다.

이것은 정말 빠릅니다.

UDF를 작성하여 그렇게 할 수 있습니다

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

MySQL을 사용하는 경우 Group_Concat이라는 훌륭한 기능이 있습니다. http://dev.mysql.com/doc/refman/55.0/en/group-by-functions.html#function_group-concat

이것은 완벽하지는 않지만 대부분의 길을 얻을 수 있습니다.

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top