1

私は2つのテーブルを持っています、contactそしてmembership

これが私のテーブルのデータです:

コンタクト:

SERIALNUMBER    TITLE   FIRSTNAME   SURNAME
     1           Mr       John        Doe
     2           Mrs      Jane        Doe

メンバーシップ:

MEMBERSHIPID    NAME    SERIALNUMBER
     1          TEST        1
     1          TEST        2

次の SELECT ステートメントを作成すると、次のようになります。

SELECT * 
FROM CONTACT C
INNER JOIN MEMBERSHIP M
ON C.SERIALNUMBER=M.SERIALNUMBER
WHERE M.MEMBERSHIPID = '1'

次の結果が表示されます。

SERIALNUMBER    TITLE   FIRSTNAME   SURNAME MEMBERSHIPID    NAME    SERIALNUMBER
     1           Mr      John        Doe         1          TEST        1
     2           Mrs     Jane        Doe         1          TEST        2

次に、次の関数を作成しました。

CREATE FUNCTION [dbo].[fnGetMemberNames] (@MEMBERSHIPID VARCHAR(100))
RETURNS VARCHAR(50)
BEGIN
  DECLARE @name_to_return AS VARCHAR(50);
  SET @name_to_return = NULL;
  SELECT  @name_to_return =
             (C.TITLE + ' ' + C.FIRSTNAME + ' ' + C.SURNAME) 
  FROM CONTACT C
  INNER JOIN MEMBERSHIP M
    ON C.SERIALNUMBER=M.SERIALNUMBER
    WHERE M.MEMBERSHIPID=@MEMBERSHIPID;
  RETURN @name_to_return ;

END;

この関数を次のように呼び出します。

SELECT [dbo].[fnGetMemberNames](1)

しかし、結果は1行しか得られません。

Mrs      Jane        Doe

改行またはカンマ区切りのリストが表示されるはずですMr John Doe

4

1 に答える 1

2
CREATE FUNCTION [dbo].[fnGetMemberNames] (@MEMBERSHIPID VARCHAR(100))
RETURNS VARCHAR(max)
BEGIN
  DECLARE @name_to_return AS VARCHAR(max);
  SET @name_to_return = NULL;
  SELECT  @name_to_return = ISNULL(@name_to_return,'') +
             (C.TITLE + ' ' + C.FIRSTNAME + ' ' + C.SURNAME) + Char(13) + Char(10) 
  FROM CONTACT C
  LEFT JOIN MEMBERSHIP M
    ON C.SERIALNUMBER=M.SERIALNUMBER
    WHERE M.MEMBERSHIPID=@MEMBERSHIPID;
  RETURN @name_to_return ;

END;
于 2013-06-15T08:24:07.197 に答える