gpt4 book ai didi

sql - 从多行列创建单列值

转载 作者:行者123 更新时间:2023-12-02 00:04:59 31 4
gpt4 key购买 nike

我正面临一个关于动态 sql 查询 的非常孤立的问题。我在一个存储过程 上运行了两个查询。他们正在关注

第一个查询:

SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY viwPerformance.LastModifiedOn DESC) AS rowNumber,viwPerformance.* FROM viwPerformance WHERE OrgId=218 AND EmployeeId = 1668 AND IsTerminate = 0 AND TagId LIKE '%' + CAST(2893 AS VARCHAR) + '%' AND Archive='False' AND SmartGoalId IS NOT NULL
) AS E
WHERE rowNumber >= 1 AND
rowNumber < 11

它的结果是所有列值和 SmartGoalId 为

4471,2815,4751,4733,4863,4690,4691,4692,4693,4694

第二个查询(这里我只需要上面查询中的 SmartgoalId,所以我使用了 stuff)

SELECT @strGoalIds = STUFF((SELECT ',' + CAST(SmartGoalId AS VARCHAR)
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY viwPerformance.LastModifiedOn DESC) AS rowNumber,viwPerformance.* FROM viwPerformance WHERE OrgId=218 AND EmployeeId = 1668 AND IsTerminate = 0 AND TagId LIKE '%' + CAST(2893 AS VARCHAR) + '%' AND Archive='False' AND SmartGoalId IS NOT NULL
) AS E
WHERE rowNumber >= 1 AND
rowNumber < 11 FOR XML PATH('')), 1, 1, '')

结果 SmartgoalId 为

4471,2815,4751,4733,4863,4651,4690,4691,4692,4693

请注意,最后一个 ID“4694”在上面的查询中不可用,因为“4651”已添加到其中,但它在第一个查询中不可用,这是正确的,“4651”不应出现在第二个查询结果中.

所以我的主要观点是为什么第二个查询给出不同的结果,因为它与第一个查询相同。

注意:Stuff 函数颠倒了值并且没有按正确的顺序给出它们,我说得对吗?

最佳答案

因为您有一些行具有相同的 LastModifiedOn 值,所以这取决于您希望如何处理关系。

如果您希望此查询始终返回 10 个“最近”的行,但在有联系时始终返回相同的行,您可以将另一列添加到 ORDER BY viwPerformance.LastModifiedOn DESC 子句中将使排序唯一且不变,例如:

ORDER BY viwPerformance.LastModifiedOn,viwPerformance.SmartGoalId DESC)

关于sql - 从多行列创建单列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18916550/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com