You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL使用Format()格式化计算列后排序异常问题求助

解决SQL格式化字段排序异常的问题

你猜的没错,Format()函数确实会把数值转换成字符串,排序时自然会按字符串的首字符顺序来,而非数值大小。下面给你两个直接可用的解决方案:

方案1:直接用原始计算值排序

不需要修改SELECT里的格式化显示字段,只需要在查询末尾加上ORDER BY,用未格式化的原始计算式来排序,这样既保留格式化后的显示效果,又能按实际数值大小排序。

修改后的完整SQL:

Select 
p.c_Code as 'Product', 
p.c_description as 'Description', 
b.c_code 'Branch', 
format(pbs.c_stocklevel, 'n2') as 'Stock Level', 
Format(pbic.c_averagecost, 'n2') as 'Average Cost', 
Format((pbs.c_Stocklevel * pbic.c_averagecost),'n2') as tv

from t_productbranchstatistics pbs
join t_product p on p.c_id = pbs.c_product
join t_branch b on b.c_id = pbs.c_branch
join t_product_branchinfo pbi on pbi.c__owner_  = p.c_id and pbi.c_branch = b.c_id
join t_product_branchinfo_costings pbic on pbic.c_id = pbi.c_costings
where pbs.c_branch = @[_CurrentBranch._ID]
ORDER BY pbs.c_Stocklevel * pbic.c_averagecost DESC -- 改成ASC就是升序,按需选择

方案2:新增原始数值字段用于排序

如果觉得重复写计算式麻烦,可以在SELECT里额外加一个未格式化的原始数值字段,用它来排序。要是不想显示这个字段,也可以嵌套子查询隐藏它。

带原始字段的写法(可显示原始值)

Select 
p.c_Code as 'Product', 
p.c_description as 'Description', 
b.c_code 'Branch', 
format(pbs.c_stocklevel, 'n2') as 'Stock Level', 
Format(pbic.c_averagecost, 'n2') as 'Average Cost', 
Format((pbs.c_Stocklevel * pbic.c_averagecost),'n2') as tv,
pbs.c_Stocklevel * pbic.c_averagecost as tv_raw -- 新增原始数值字段

from t_productbranchstatistics pbs
join t_product p on p.c_id = pbs.c_product
join t_branch b on b.c_id = pbs.c_branch
join t_product_branchinfo pbi on pbi.c__owner_  = p.c_id and pbi.c_branch = b.c_id
join t_product_branchinfo_costings pbic on pbic.c_id = pbi.c_costings
where pbs.c_branch = @[_CurrentBranch._ID]
ORDER BY tv_raw DESC

隐藏原始字段的写法(仅用于排序)

SELECT Product, Description, Branch, `Stock Level`, `Average Cost`, tv
FROM (
    Select 
    p.c_Code as 'Product', 
    p.c_description as 'Description', 
    b.c_code 'Branch', 
    format(pbs.c_stocklevel, 'n2') as 'Stock Level', 
    Format(pbic.c_averagecost, 'n2') as 'Average Cost', 
    Format((pbs.c_Stocklevel * pbic.c_averagecost),'n2') as tv,
    pbs.c_Stocklevel * pbic.c_averagecost as tv_raw
    from t_productbranchstatistics pbs
    join t_product p on p.c_id = pbs.c_product
    join t_branch b on b.c_id = pbs.c_branch
    join t_product_branchinfo pbi on pbi.c__owner_  = p.c_id and pbi.c_branch = b.c_id
    join t_product_branchinfo_costings pbic on pbic.c_id = pbi.c_costings
    where pbs.c_branch = @[_CurrentBranch._ID]
) AS sub
ORDER BY tv_raw DESC

内容的提问来源于stack exchange,提问作者Kalvas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:44:58