【发布时间】:2018-08-07 10:39:43
【问题描述】:
我需要从两个不具有相同元素数的表的 SQL 查询中创建包含偶数列的格式化文本 (CSV) 输出。我似乎无法将数据填充到所需的列数。
样本数据
table Students(id, name)
values
(1, Alex),
(2, Bob),
(3, Charlie),
(4, David)
table Hobbies (studentId, hobby)
values
(2,'skating')
(2,'sailing')
(3,'reading')
(4,'video games')
(4,'paintball')
(4,'nascar')
(4,'baseball')
期望的输出
[ID][OutputString]
[0][Student,Hobby1,Hobby2,Hobby3,Hobby4]
[1][Alex,,,,]
[2][Bob,skating,sailing,]
[3][Charlie,reading,,,]
[4][David,video games,paintball,nascar,baseball]
损坏的伪代码
DECLARE @maxHobbies INT = 4;
DECLARE @hobbyCount INT = 1;
DECLARE headerString varchar(max) = 'Student';
WHILE @hobbyCount <= @maxHobbies
BEGIN
set @headerString = @headerString + ',Hobby' + @hobbyCount
@hobbyCount = @hobbyCount + 1
END
DECLARE @outputString varchar(max)
SET @outputString = concat(@headerSting, char(13)) +
SELECT 0 AS ID, @headerString AS OutputString
UNION
SELECT
id,
name + (WHILE @hobbyCount <= @maxHobbies BEGIN
(CASE
WHEN EXISTS SELECT hobby FROM Hobbies where studentId = Students.id
THEN ',' + SELECT hobby FROM Hobbies where studentId = Students.id
ELSE ','
END)
END)
FROM Students
【问题讨论】:
标签: sql sql-server select while-loop union