テーブル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
ありがとうございました。
SQL Server 2005を使用しています。
追伸実際のT-SQLクエリをいただければ幸いです:)
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
ええと...答えはすでに受け入れられているようです...しかし、とにかく別の解決策を見るべきだと思います:
/* 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
*/
これは、UDFを必要とせずに必要なことを行うための最速かつ最も簡単な方法の1つです。 http://weblogs.sqlteam.com/mladenp/archive/2007/06/01/60220.aspx =
数値テーブルを使用する方法は他にもありますが、これは非常に大きなデータセットの場合は高速ですが、必要になるとは思いません。
このスレッドは既にStackOverflowにあります をご覧ください。T-SQLの例を便利に提供します。
上司は2003年にこの方法で記事を書きました。 COALESCEとの連結
DECLARE @Str varchar(500)
SELECT @Str=COALESCE(@Str,'') + CAST(ID as varchar(10)) + ','
FROM dbo.fcUser
SELECT @Str
カーソルで行をループして一時テーブルのフィールドに追加するか、COALESCE関数を使用してフィールドを連結できます。
申し訳ありませんが、最初は間違った質問を読んでください。次のようなことができます:
declare @result varchar(max)
--must "initialize" result for this to work
select @result = ''
select @result = @result + alias
FROM aliases
WHERE username='Bob'