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' –