Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基于其他列集以字符串形式返回列_Sql Server_Sql Server 2008 - Fatal编程技术网

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 AGGRowNumber函数来实现这一点:

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你检查了吗@萨蒂亚穆尔蒂