首页 > 解决方案 > 将多个单位转换为 TB 并执行计算的查询

问题描述

我有一个数据集 df,我想在其中将一列从字节转换为太字节,以及将兆字节转换为 TB。

Free                    Total
30,000,000,000,000.00   40,000,000
40,000,000,000,000.00   50,000,000

字节到 TB - 除以 1024/1024/1024/1024 兆字节到 TB - 除以 1024/1024

期望的结果

Free    Total   Used
30      40      10
40      50      10

这就是我正在做的

SELECT 
    Free /1024/ 1024/ 1024 /1024 AS Free1, 
    Total /1024 /1024 AS Total1, 
    (Total1-Free1) As Used
FROM df

但是,我没有得到我想要的结果。任何建议表示赞赏

标签: sqlsql-servertsql

解决方案


您不能在同一范围内重复使用别名。相反,您需要重复表达式(或使用子查询或 CTE):

select 
    free / 1024 / 1024 / 1024 /1024 as free1, 
    total / 1024 / 1024 as total1, 
    (total / 1024 / 1024 - free / 1024 / 1024 / 1024 / 1024) as used
from df

我们可以稍微分解计算:

select 
    free / 1024 / 1024 / 1024 /1024 as free1, 
    total / 1024 / 1024 as total1, 
    (total - free / 1024 / 1024)  / 1024 / 1024 as used
from df

请注意,如果您将值存储为整数,则上述查询将进行整数除法(即,结果被截断为整数)。如果这不是您想要的,那么只需将其中一个操作数转换为小数,如下所示:

free / 1024.0 / 1024 / 1024 /1024 as free1, 

推荐阅读