繁体   English   中英

SQL Server-具有Variable和SUM()方法的SELECT语句

[英]SQL Server - SELECT statement with Variable and SUM() method

编辑:

这次将尽我所能尽可能详细地解释。 我试图使查询更简单些,以为它将使查询更容易理解,但这可能是一个不好的举动。

我试图让从PriorityScore DESCASC TimeAdded命令我的队列表的第一行的PK_QueueFK_Queue_Milestone

我只想获得第一行,但建议我不要使用TOP(1),因为这将导致对原始选择进行另一个SELECT。

这是我的查询:

SELECT
@Local_PK_Queue = Q.PK_Queue,
@Local_PK_Milestone_Validate = Q.FK_Queue_Milestone

FROM dbo.Queue AS Q 

INNER JOIN @Local_PKHolderTable AS P
ON Q.FK_Queue_Process = P.PK_Process
AND Q.FK_Queue_Milestone = P.PK_Milestone
AND Q.FK_Queue_QueueType = P.PK_QueueType

WHERE Q.FK_Queue_Milestone = P.PK_Milestone
AND Q.FK_Queue_Process = P.PK_Process
AND Q.Tags LIKE '%' + @Input_Tags + '%'
AND ((FK_Queue_State = 5 AND TimeDeferred < GETUTCDATE()) OR (FK_Queue_State = 1))
AND Q.FK_Queue_Robot IS NULL
AND Q.FK_Queue_QueueType = P.PK_QueueType

ORDER BY
Q.PriorityScore DESC,
Q.TimeAdded

当我尝试运行查询时,它似乎无法正确排序,因为它总是获取的最后一行

因此做了一些研究,在这里偶然发现了这个问题

似乎是我遇到的相同问题,但使用MySQL而不是SQL Server。

TLDR:想要按优先级排序DESC和TimeAdded,但不能正常工作

好吧,你可以这样写:

SELECT @var = PK_Test, @var2 = SUM(PriorityScore)
FROM Queue
GROUP BY PK_Test
ORDER BY SUM(PriorityScore);

但是,这很奇怪,因为GROUP BY可能返回多行,而您大概只需要一行。 我可能会怀疑您是否真的想将变量分配给最高优先级分数:

SELECT TOP (1) @var = PK_Test, @var2 = SUM(PriorityScore)
FROM Queue
GROUP BY PK_Test
ORDER BY SUM(PriorityScore) DESC;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM