この SQL ステートメントに関連する 3 つのテーブルがあります。
計画
- プロジェクト レコード ID
- プロジェクト名
Project_CompetitionCategory
- ProjectCompetitionCategoryRecordId
- プロジェクト レコード ID
- コンペティション カテゴリ レコード ID
競技カテゴリー
- コンペティション カテゴリ レコード ID
- 競技カテゴリー名
テーブルから取得しようとしているのはProjectRecordId, ProjectName, CompetitionCategoryName
値です。
ただし、Project
は複数の に参加している場合がありますCompetition Category
。情報を 1 つの行に配置し、競技を独自の列に配置する必要があります。
以下の例
1. 1 | Project No 1 | Competition 1, Competition 2
2. 2 | Project No 2 | Competition 2, Competition 3, Competition 4
3. 3 | Project No 3 | Competition 1, Competition 4
これは私が持っている現在のSQLステートメントです:
DECLARE @Data VARCHAR(2000)
DECLARE @pID INT
DECLARE @pName VARCHAR(300)
SELECT
@pID = Project.ProjectRecordId,
@pName = Project.ProjectName,@Data = COALESCE(@Data + ',' + CompetitionCategoryName, CompetitionCategoryName)
FROM
Project_CompetitionCategory
INNER JOIN
CompetitionCategory ON Project_CompetitionCategory.CompetitionCategoryRecordId = CompetitionCategory.CompetitionCategoryRecordId
INNER JOIN
Project ON Project_CompetitionCategory.ProjectRecordId = Project.ProjectRecordId
WHERE
Project.ProjectRecordId = 10
SELECT
@pID AS 'Project Record ID',
@pName AS 'Project Name',
@Data AS Competition,
(SELECT COUNT(ProjectRecordId) FROM Presentation WHERE ProjectRecordId = @pID) AS 'Number of Recorded Presentations'
外すと
WHERE Project.ProjectRecordId = 10
次に、最後の値のみをフェッチし、CompetitionCategory
めちゃくちゃになります。
以下のようなもの。
1. 15 | Project No 15 | Competition1, Competition 2, Competition 3, Competition 2, Competition 4
このstackoverflowの記事に対するさまざまな回答を読みました Concatenate many rows into a single text string?
次のようなサイトで解決策を見つけてググった
- http://databases.aspfaq.com/general/how-do-i-concatenate-strings-from-a-column-into-a-single-row.html
- http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
しかし、私はまだそれに対する解決策を見つけることができません。SQL Server 2008 R2 を使用しています。私は SQL を初めて使用するので、必要なデータを取得できない理由を理解したいと考えています。
前もって感謝します。