Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/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
Tsql 是否使用另一个子查询对子查询中的数据进行排序?_Tsql_Group By_Subquery_Sql Order By - Fatal编程技术网

Tsql 是否使用另一个子查询对子查询中的数据进行排序?

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

我正在尝试使用OUN.outcomeKey对OUN.note列进行排序,因为 它现在的工作方式是把笔记按错误的顺序(按字母顺序排序)。你知道怎么做吗?我一直在尝试使用内部的另一个子查询对数据进行排序,但我运气不好(我没有太多的经验)

以下是我当前的查询:

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之前的环境中使用它。

看一看,这正是我所需要的。非常感谢。刚刚在我的答案中添加了一个额外的编辑。也许这对你来说也很有趣。