テーブルのレコードを返す必要があり、結果セットにはコンマ区切りのリストを含める必要があります。
3つのテーブルの画像を添付しました。最初のテーブルにレコードを返す選択を行い、スクリーンショットの3番目のテーブルに存在する最後のAwardFocusNameを含める必要があります。
したがって、私の結果セットは1つのレコードを返し、その中にAwardFocusNamesのリストを含めます(カンマ区切り)。
これは、私が過去に同じようなことをするために使用したトリックです。 [〜#〜] substring [〜#〜] 関数を使用します。
SELECT n.nominationID 、SUBSTRING(( SELECT '、' + naf.awardFocusName FROM NominationAwardFocus naf JOIN AwardFocus af ON naf.awardFocusID = af.awardFocusID WHERE n.nominationID = naf.nominationID FOR XML PATH( '') )、2、1000000) FROMノミネーションn
2は、副選択が最初の項目に追加する先行コンマを切り取るために使用され、1000000は「文字列の残りのすべて」を意味する大きな数として選択されることに注意してください。
このようなスカラー値関数を作成します
CREATE FUNCTION [dbo].[CreateCSV](
@Id AS INT
)
RETURNS VARCHAR(MAX)
AS
BEGIN
Declare @lst varchar(max)
select @lst = isnull(@lst+',','')+AF.AwardFocusName
from AwardFocus as AF
inner join AwardFoccusNomination as AFN
on AF.AwardFocusID = AFN.AwardFocusID
where AFN.NominationID=@Id
return @lst
END
私はこれを私のブログでここに行う方法を説明します:
http://johniekarr.wordpress.com/2011/08/08/pushing-multiple-results-into-one-column/
最善の解決策は、(グループ内の)値をコンマ区切りのリストに連結するユーザー定義集計を作成することだと思います。 例1を参照してください: http://msdn.Microsoft.com/en-us/library/ms131056.aspx
使用法:
SELECT
Nomination.NominationId,
Nomination.Created,
Nomination.Updated,
dbo.Concatenate(AwardFocus.AwardFocusName) As Names
FROM
Nomination
JOIN NominationAwardFocus
ON Nomination.NominationId = NominationAwardFocus.NominationId
JOIN AwardFocus
ON NominationAwardFocus.AwardFocusId = AwardFocus.AwardFocusId
GROUP BY
Nomination.NominationId,
Nomination.Created,
Nomination.Updated