Sql server 基于其他列集以字符串形式返回列
表结构Sql server 基于其他列集以字符串形式返回列,sql-server,sql-server-2008,Sql Server,Sql Server 2008,表结构 SNO StudenNumber Subject N0 Remark 1 10 1 Good 2 10 2 Average 3 10 3 Very Good 4 10 4 Poor 5 10 5 Very Poor 6
SNO StudenNumber Subject N0 Remark
1 10 1 Good
2 10 2 Average
3 10 3 Very Good
4 10 4 Poor
5 10 5 Very Poor
6 10 1 Very Good
7 10 2 Good
8 10 3 Outstanding
9 10 4 Poor
10 10 5 Very Poor
11 10 1 Very Good
12 10 2 Good
13 10 3 Outstanding
14 10 4 Good
15 10 5 Poor
以下是某一年学生在第一学期、第二学期和第三学期考试中的表现
预期结果是:
[1: Good, 2: Average, 3: Very Good, 4: Poor, 5: Very Poor],
[1: Very Good, 2 : Good, 3: Outstanding 4 : Poor, 5:Very Poor],
[1: Very Good, 2 : Good, 3: Outstanding 4 : Good, 5:Poor]
您可以使用STRING\u AGG和RowNumber函数来实现这一点:
SELECT STRING_AGG(CONCAT(M.SUBJECT_NO,' : ',M.REMARK),',')WITHIN GROUP (ORDER BY M.S_NO)
FROM @T M INNER JOIN (
SELECT S_NO,
ROW_NUMBER() OVER(PARTITION BY SUBJECT_NO ORDER BY SUB_NO) AS ROW_NUMBER
FROM @T)S ON S.S_NO=M.S_NO
GROUP BY S.ROW_NUMBER
对于SQL 2008:您可以使用Stuff
;WITH CTE AS
(SELECT ROW_NUMBER() OVER(PARTITION BY SUBJECT_N0 ORDER BY SUBJECT_N0) AS
ROW_NUMBER ,REMARK,SUBJECT_N0 FROM @T )
SELECT DISTINCT STUFF((SELECT CONCAT(',',T1.SUBJECT_N0,': ',REMARK)
FROM CTE T1
WHERE T1.ROW_NUMBER=CTE.ROW_NUMBER
FOR XML PATH('')),1,1,'') AS CONCATENATION FROM CTE
请分享表结构、示例数据以及您迄今为止所做的尝试。我已添加了表结构请阅读中的前几段以及相应的问题。您是否意识到不再支持SQL Server 2008?您可能想考虑升级ASAP。我正在研究SQL Services 2008。字符串_agg函数不支持。谢谢你的回复。我已经编辑了代码。你能检查并更新你的评论吗?@Sathiamoorthyd你检查了吗@萨蒂亚穆尔蒂