Tsql 是否使用另一个子查询对子查询中的数据进行排序?
我正在尝试使用OUN.outcomeKey对OUN.note列进行排序,因为 它现在的工作方式是把笔记按错误的顺序(按字母顺序排序)。你知道怎么做吗?我一直在尝试使用内部的另一个子查询对数据进行排序,但我运气不好(我没有太多的经验) 以下是我当前的查询:Tsql 是否使用另一个子查询对子查询中的数据进行排序?,tsql,group-by,subquery,sql-order-by,Tsql,Group By,Subquery,Sql Order By,我正在尝试使用OUN.outcomeKey对OUN.note列进行排序,因为 它现在的工作方式是把笔记按错误的顺序(按字母顺序排序)。你知道怎么做吗?我一直在尝试使用内部的另一个子查询对数据进行排序,但我运气不好(我没有太多的经验) 以下是我当前的查询: SELECT DISTINCT OC.outcomeKey [Outcome Key], OC.outcome [Result], STUFF((SELECT ','+' '+ OUN.note FROM Outcome AS OUT JOIN
SELECT DISTINCT OC.outcomeKey [Outcome Key], OC.outcome [Result],
STUFF((SELECT ','+' '+ OUN.note
FROM
Outcome AS OUT
JOIN OutcomeNote AS OUN
ON OUT.outcomeKey = OUN.outcomeKey
WHERE OUN.outcomeKey = OC.outcomeKey
GROUP BY OUN.note
FOR XML PATH ('')), 1, 1, '') [Outcome Note]
FROM Outcome AS OC
任何帮助或提示都将不胜感激!另外,如果需要更多信息,请告诉我。您可以更换线路
GROUP BY OUN.note
排队
ORDER BY OUN.outcomeKey
此外,由于串联以“,”开头,您可能希望使用1、2”作为STUFF函数的附加参数。否则,[结果说明]列中的值总是以空格开头
编辑:
顺便说一下,在生成[Output note]列值的子查询中,按outcomeKey对注释进行排序没有任何影响。。。由于每个子查询结果中的所有注释都将具有相同的outcomeKey值
当然,您可以根据需要对任何列进行排序。也许OutcomeNotes表中还有其他列可以作为结果备注的有用排序列
如果我误解了你的问题,请提供结果表和结果表的定义,以及这些表的演示填充和所需/预期的查询结果
编辑2:
从SQL Server 2017开始,Transact-SQL包含一个名为STRING_AGG的函数,该函数在功能上似乎与MySQL的GROUP_CONCAT函数相当(或多或少)。使用此函数,您的查询将如下所示:
SELECT
OUN.outcomeKey [Outcome Key],
OC.outcome [Result],
STRING_AGG(OUN.[Note], ', ') WITHIN GROUP (ORDER BY OUN.outcomeKey) [Outcome Note]
FROM
Outcome AS OC
JOIN OutcomeNote AS OUN ON OUN.outcomeKey = OC.outcomeKey
GROUP BY
OUN.outcomeKey,
OC.outcome;
在使用SQL Server 2017或SQL Azure时,这可能是一个更合适的选择,因为它不仅使查询更具可读性,而且还消除了在查询中使用(效率较低的)XML函数
过去我也曾大量使用XML功能进行字段连接(您使用它的方式),但我注意到我的查询(有时包含多达10列的连接数据)的性能有相当大的下降。从那时起,我倾向于在SQL Server 2017之前的环境中使用它。看一看,这正是我所需要的。非常感谢。刚刚在我的答案中添加了一个额外的编辑。也许这对你来说也很有趣。