سؤال

وأنا أعلم أنك تستطيع أن تفعل ذلك، لأنني رأيت عليها القيام به مرة واحدة من قبل، ولكن أنسى أين وحتى الآن أنا لم بحاجة للقيام بذلك.

ولدي جدول يسمى الموظفين، ولها بيانات الموظف مختلفة (دوه). أحتاج إلى الاستعلام من شأنها أن تفعل مختارة على الاسم الأول والأخير من كل الصفوف في الجدول، ثم contenate كل منهم في سلسلة بفواصل.

وعلى سبيل المثال، لدي بعض الصفوف (الكثير أكثر من ذلك في الواقع، ولكن من أجل هذا السؤال مجرد افتراض اثنين) من البيانات التي تبدو مثل:

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

وأنا في حاجة إلى اختيار التي يمكن إرجاع البيانات المشار إليها في هذا النموذج:

Richard Prescott, Jill Sentieri, Carol Winger

وشكرا لكم مقدما على مساعدتكم!

هل كانت مفيدة؟

المحلول

استخدم تتجمع. شيء من هذا القبيل:

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

وربما هذا يمكن أن تساعد. وقد طلب هذا السؤال من قبل. كيفية إنشاء دالة SQL Server إلى "الانضمام" عدة صفوف من فرعي في حقل محدد واحد؟

إذا كنت تستخدم الخلية، لديهم وظيفة كبيرة تسمى GROUP_CONCAT ان يفعل ذلك بالضبط. HTTP: //dev.mysql. كوم / وثيقة / RefMan معلومات / 5.0 / EN / مجموعة تلو 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