3
我已经搜索了很多线程,网站和博客以及API,并且似乎无法找出这个问题。我想从联结表中的行创建一个CSV字符串,但这里有一个问题。它需要用于整套数据。我知道,令人困惑,这是故障。从连接表内部查询(SQL Server)中逗号分隔的字符串
让我们使用与下表中的一般示例:
- 学生(ID,姓名,GPA)
- 类(ID,部门,级别)
- StudentsInClasses(StudentID,的ClassID)
假设我想要查询所有类,但在该查询中(对于每条记录),我还想在每个类中获取学生ID的CSV字符串。结果应该是这个样子:
Class StudentsID_CSVString
----- --------------------
BA302 1,2,3,4,5,6,7,8,9
BA479 4,7,9,12,15
BA483 7,9,12,18
我试图用COALESCE语句像下面这样,但我不能让它因为聚结愚蠢的语法的工作。有没有更好的方法来实现这个目标,或者我只是在做一个哑语句错误?
declare @StudentsID_CSVString varchar(128)
select Dept + Level as 'Class',
coalesce(@StudentsID_CSVString + ',', '')
+ CAST(StudentID as varchar(8)) as 'StudentsID_CSVString'
from Classes
left outer join StudentsInClasses ON Classes.ID = StudentsInClasses.ClassID
我用下面的代码进行测试:
declare @Students table (ID int, Name varchar(50), Gpa decimal(3,2))
declare @Classes table (ID int, Dept varchar(4), [Level] varchar(3))
declare @StudentsInClasses table (StudentID int, ClassID int)
declare @StudentsID_CSVString varchar(128)
insert into @Students (ID) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18)
insert into @Classes (ID, Dept, [Level]) values (1, 'BA', '302'), (2, 'BA', '379'), (3, 'BA', '483')
insert into @StudentsInClasses (StudentID, ClassID) values
(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),
(4,2),(7,2),(9,2),(12,2),(15,2),
(7,3),(9,3),(12,3),(18,3)
哇靠。测试过,效果很好。 +1 =) – jadarnel27
@Mikael:我得到了'1,2,3,4,5,6,7,8,9'三个类的每一个与您的代码:( – Chiramisu
@Chiramisu - 你可以添加数据你在你的表格中有你的问题,我想在StudentInClass和Class之间的连接有问题,或者你忘记了子查询中where子句where C.ClassID = C.ID' –