我有三个与此SQL语句相关的表。并置SQL表,但只检索一个?
项目
- ProjectRecordId
- 项目名
Project_CompetitionCategory
- ProjectCompetitionCategoryRecordId
- ProjectRecordId
- CompetitionCategoryRecordId
CompetitionCategory
- CompetitionCategoryRecordId
- CompetitionCategoryName
我想从我的表中检索是ProjectRecordId, ProjectName, CompetitionCategoryName
值。
然而Project
可能会参与多个Competition Category
。我需要将这些信息排成一行,并将比赛放在自己的专栏中。
实例下
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
我已阅读各种回答这个计算器文章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/
的解决方案。然而我还是canno找到解决办法。我正在使用SQL Server 2008 R2。我是SQL新手,想了解为什么无法获取我想要的数据。
在此先感谢。
这种基于可变GROUP_CONCAT工程仅单个记录输出。如果你需要分组数据,[看看xml路径('')解决方案](http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-ms-sql-server -2005)。 – 2012-07-30 13:52:05