我有这个查询:
SELECT
p.[TerminalId],
Keys = JSON_QUERY('[' + string_agg(json_query('{"Point":"' + p.Location.STAsText() + '","CreatedDateTime":"' + cast(p.CreatedDateTime as nvarchar(20)) + '"}'),',') + ']')
FROM
(SELECT
geography::STGeomFromText(Location.STAsText(), 4326) as Location,
[CreatedDateTime],
[TerminalId],
ROW_NUMBER() OVER (ORDER BY [CreatedDateTime] ASC) AS RowNum
FROM
[Magicar_Route].[dbo].[PacketLocations]) AS p
GROUP BY
p.[TerminalId]
我希望p.Location
在CreatedDateTime asc
JSON列中按Keys
进行排序,但是在查询Location
之后没有对ASC
进行排序?
如何根据 CreatedDateTime ASC 对位置进行排序?
我将查询更改为此:
WITH NewScores AS
(
SELECT
geography::STGeomFromText(Location.STAsText(), 4326) AS Location,
[CreatedDateTime],
[TerminalId]
FROM
[Magicar_Route].[dbo].[PacketLocations]
ORDER BY
[CreatedDateTime] ASC
)
SELECT
[TerminalId],
Keys = JSON_QUERY('['+ string_agg(json_query('{"Point":"' + Location.STAsText() + '","CreatedDateTime":"' + cast(CreatedDateTime as nvarchar(20)) + '"}'),',') + ']')
FROM
NewScores
但是不幸的是我遇到了这个错误:
Msg 1033,第15级,状态1,第100行
除非还指定了TOP,OFFSET或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效。
答案 0 :(得分:0)
与其在CTE内进行排序,不如在下面的查询中放置
WITH NewScores AS
(
SELECT
geography::STGeomFromText(Location.STAsText(), 4326) AS Location,
[CreatedDateTime],
[TerminalId]
FROM
[Magicar_Route].[dbo].[PacketLocations]
)
SELECT
[TerminalId],
Keys = JSON_QUERY('['+ string_agg(json_query('{"Point":"' + Location.STAsText() + '","CreatedDateTime":"' + cast(CreatedDateTime as nvarchar(20)) + '"}'),',') + ']')
FROM
NewScores
ORDER BY
[CreatedDateTime] ASC