Назначить переменную с различными записями - PullRequest
3 голосов
/ 25 мая 2011

Я создал функцию с табличным значением для возврата списка, разделенного запятыми, но у меня возникают проблемы в списке, содержащем только различные значения.Моя функция выглядит следующим образом:

CREATE FUNCTION [dbo].[clientContactsConcat] ( @clnum INT )
RETURNS NVARCHAR(4000)
AS BEGIN
    DECLARE @concat NVARCHAR(4000)
    SELECT @concat =COALESCE(@concat, ' ') + clcontact + ', '
    FROM    dbo.client
    WHERE crelated = @clnum
    AND NOT clcontact IS NULL
    SELECT  @concat = SUBSTRING(@concat, 2, LEN(@concat) - 2)
    RETURN ( @concat )
END

Это в настоящее время будет перечислять все значения, когда я добавлю изменение SELECT в SELECT DISTINCT @concat =COALESCE(@concat, ' ') + clcontact + ', '..., тогда он вернет только первый результат, возвращенный выбором.

Есть ли способ вернуть только отдельные записи при присваивании переменной в сочетании с COALESCE?

Для следующих записей:

clcontact
---------------------
Mr S Smith
Mrs R Jones
Ms L Morrison
Mrs R Jones

Я хочу, чтобы было возвращено следующее: Mr S Smith, Mrs R Jones, Ms L Morrison.

1 Ответ

2 голосов
/ 25 мая 2011

Вы можете попробовать поместить SELECT DISTINCT в производную таблицу.

 SELECT @concat =COALESCE(@concat, ' ') +  clcontact
 FROM
 (

    SELECT DISTINCT  clcontact + ', ' AS clcontact
    FROM    dbo.client
    WHERE crelated = @clnum
    AND NOT clcontact IS NULL
  ) T

Обратите внимание, что этот метод объединения строк не гарантированно работает , но я не уверен в каком-либо явно лучшем способе в SQL Server 2000.

...