51

ユーザーごとに複数のエイリアスを持つテーブルUserAliases( )があります。UserId, Aliasクエリを実行して、特定のユーザーのすべてのエイリアスを返す必要があります。トリックは、すべてを1つの列に返すことです。

例:

UserId/Alias  
1/MrX  
1/MrY  
1/MrA  
2/Abc  
2/Xyz

次の形式のクエリ結果が必要です。

UserId/Alias  
1/ MrX, MrY, MrA  
2/ Abc, Xyz

ありがとうございました。

SQLServer2005を使用しています。

ps実際のT-SQLクエリをいただければ幸いです:)

4

6 に答える 6

60

COALESCE で関数を使用できます。

CREATE FUNCTION [dbo].[GetAliasesById]
(
    @userID int
)
RETURNS varchar(max)
AS
BEGIN
    declare @output varchar(max)
    select @output = COALESCE(@output + ', ', '') + alias
    from UserAliases
    where userid = @userID

    return @output
END

GO

SELECT UserID, dbo.GetAliasesByID(UserID)
FROM UserAliases
GROUP BY UserID

GO
于 2008-09-23T18:56:29.237 に答える
19

ええと...答えはすでに受け入れられているようです...しかし、とにかく別の解決策を見るべきだと思います:

/* EXAMPLE */
DECLARE @UserAliases TABLE(UserId INT , Alias VARCHAR(10))
INSERT INTO @UserAliases (UserId,Alias) SELECT 1,'MrX'
     UNION ALL SELECT 1,'MrY' UNION ALL SELECT 1,'MrA'
     UNION ALL SELECT 2,'Abc' UNION ALL SELECT 2,'Xyz'

/* QUERY */
;WITH tmp AS ( SELECT DISTINCT UserId FROM @UserAliases )
SELECT 
    LEFT(tmp.UserId, 10) +
    '/ ' +
    STUFF(
            (   SELECT ', '+Alias 
                FROM @UserAliases 
                WHERE UserId = tmp.UserId 
                FOR XML PATH('') 
            ) 
            , 1, 2, ''
        ) AS [UserId/Alias]
FROM tmp

/* -- OUTPUT
  UserId/Alias
  1/ MrX, MrY, MrA
  2/ Abc, Xyz    
*/
于 2008-10-07T03:40:50.627 に答える
1
DECLARE @Str varchar(500)

SELECT @Str=COALESCE(@Str,'') + CAST(ID as varchar(10)) + ','
FROM dbo.fcUser

SELECT @Str
于 2009-05-21T05:32:37.100 に答える
0

カーソルを使用して行をループし、一時テーブルのフィールドに追加するか、COALESCE関数を使用してフィールドを連結することができます。

于 2008-09-23T18:46:21.913 に答える
0

申し訳ありませんが、最初に間違った質問を読んでください。あなたはこのようなことをすることができます:

declare @result varchar(max)

--must "initialize" result for this to work
select @result = ''

select @result = @result + alias
FROM aliases
WHERE username='Bob'
于 2008-09-23T18:48:41.097 に答える
-1

group_concat()はあなたが探しているもののように聞こえます。

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

あなたはmssqlを使用しているので、「group_concat mssql」をグーグルで検索し、group_concat機能を再作成するための多数のヒットを見つけました。これが私が見つけたヒットの1つです:

http://www.stevenmapes.com/index.php?/archives/23-Recreating-MySQL-GROUP_CONCAT-In-MSSQL-Cross-Tab-Query.html

于 2008-09-23T18:45:28.233 に答える