首页 > 解决方案 > MB到TB的转换和聚合

问题描述

我在 SQL Server 中有一个数据集,我想将多个列从 MB 转换为 TB,并减去将条件设置为特定日期的两列。

totalMB     freeMB  date
12204984    6493286 11/2/2020

期望的输出

totalTB freeTB  usedTB   date
11.63   6.19    5.44    11/2/2020

这就是我正在做的事情:

SELECT totalMB, freeMB, date, (totalMB/(1024*1024) AS totalTB, (freeMB/(1024*1024) AS freeTB), 
totalTB - freeTB AS usedTB
FROM table
where date = '2020/11/2'

但是,我没有收到错误 - 语法无效,而不是所需的输出。我还在研究。任何建议表示赞赏

标签: sqlsql-server

解决方案


您不能在select. 但是您可以使用横向连接:

SELECT t.totalMB, t.freeMB, t.date, v.totalTB, v.freeTB, 
       (v.totalTB - v.freeTB) AS usedTB
FROM table t CROSS APPLY
     (VALUES (t.totalMB/(1024*1024), t.freeMB/(1024*1024))
     ) v(TotalTB, freeTB)
WHERE date = '2020-11-02'

推荐阅读