大家好,感谢您花时间研究我的问题,
背景
我正在使用 ROW_NUMER() 函数和 PARTITION BY..ORDER BY 语句来为我的一个表中的每个值设置一个 varchar 值,并在其末尾增加一个 int 值。
SELECT component_module_id as component_module_id,
component_property_id,
'cf' + CAST(ROW_NUMBER() OVER (PARTITION BY component_module_id ORDER BY component_module_id) as VARCHAR) AS cf
FROM component_property
这里的“cf”值来自每个 component_module_id 的 cf1-cfX
我的问题
每当我尝试在其他地方使用这些 cf 值时,例如保存在临时表中,其他 Ordering 和 Grouping 语句都会更改这些值。这就像生成“cf”值的语句被保存,而不是“cf”值本身。
将上面的查询插入到临时表中后#t -
SELECT * FROM #t ORDER BY cf
我收到从 cf1 开始并跳转到 cf10 然后 cf100 的“cf”值,cf 值范围从 cf1 到 cf900...我应该只接收从 c1 到 cf29 的值。
我的问题是 - 为什么此列中的值与任何其他正常值不同?为什么将 ROW_NUMBER() OVER (PARTITION BY....)) 计算传递给后续的查询?(如果这实际上是正在发生的事情)。最后,我如何将这些“cf”值视为正常的 VARCHAR 值,并且在我尝试按它们进行分组或排序时不让它们改变。
谢谢你的帮助!
更新
我接受了拉努的建议,
“似乎你最好只存储 int 值,并使用(PERSISTED)计算列来连接你的前缀和 ROW_NUMBER 值。”
并且我的“cf”值在排序后现在可以正确显示。感谢大家标记为已解决。