2011-11-28 16 views
18

テーブルのレコードを返す必要があり、結果セットにカンマ区切りのリストを含める必要があります。カンマで区切られた結果セットを持つSQLサーバのサブクエリ

私は3つのテーブルの画像を添付しました。私は最初のテーブルのレコードを返すselectを実行し、スクリーンショットの3番目のテーブルに存在するAwardFocusNameの最後を含める必要があります。

私の結果セットは1つのレコードを返し、その中にAwardFocusNamesのリストを(カンマで区切って)含めます。

enter image description here

+0

のようなスカラー値関数を作成しますか。 – ManseUK

+0

テーブル名は、ノミネート、AwardFocus、ノミネートアワードフォーカス(スクリーンショットに表示されている順)です。 – obautista

答えて

43

ここで私はこれを行う方法を説明し、私は似たもの

 

    SELECT n.nominationID 
     , SUBSTRING((
          SELECT ',' + af.awardFocusName 
          FROM NominationAwardFocus naf 
          JOIN AwardFocus af 
           ON naf.awardFocusID = af.awardFocusID 
          WHERE n.nominationID = naf.nominationID 
          FOR XML PATH('') 

         ), 2, 1000000) 
    FROM Nomination n 

+1

'&'を含む 'awardFocusName'でこれを試してください。それはかなりではありません。 –

+0

私は&issueに入りましたが、単純なREPLACEが問題を解決しました。 – Hagelt18

+0

すばらしい答え! – jhilden

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 
1

テーブル名は何ですか?この

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 [email protected] 


    return @lst 

END 
関連する問題