【发布时间】:2020-12-02 19:36:46
【问题描述】:
我在 SQL 中有一个包含各种列的股票相关表,其中一个是“市值”。此列是“nvarchar”数据类型,具有 1.16T、1.2B、70.324 M、8B 等值。
其中 T= 万亿 > B= 十亿 > M = 百万
我需要按降序对这些值进行排序。
我试过这个查询:
select MarketCap from StockSummary
ORDER BY
CASE WHEN ISNUMERIC(MarketCap) = 1 THEN 0 ELSE 1 END,
CASE WHEN ISNUMERIC(MarketCap) = 1 THEN CAST(MarketCap AS float) ELSE 0 END,
MarketCap DESC
输出:
Market Cap
700.394M
61.816B
6.983B
39.511B
28.996B
231.31M
2.112B
1.23T
数字按降序排列,但不考虑单位(T= 万亿 > B= 十亿 > M = 百万)。因此不能满足我的要求。
需要的输出:
Market Cap
1.23T
61.816B
39.511B
28.996B
6.983B
2.112B
700.394M
231.31M
谁能建议一个查询来解决这个问题?
提前谢谢你。
【问题讨论】:
-
重新设计架构并在写入该表时输入规范化值。在这种情况下,数字实际上是数字,因此将其存储为文本不是一个好主意。
-
为什么这个问题被标记为 MySQL?它不支持 T-SQL。
标签: sql-server sorting tsql sql-order-by sql-server-2019