【问题标题】:Excel formula to SQLExcel 公式转 SQL
【发布时间】:2020-03-04 22:23:38
【问题描述】:

我想在我的 MSSQL 数据库中添加一个包含计算值的列,但我不知道如何创建 SQL 代码

我的数据包含PricePerUnitInstance_Type

我希望新的计算值列显示每个 Instance_Type 相对于同一 Instance_Type 中最昂贵的便宜百分比。例如,最昂贵的 c5.12xlarge 位于第一行(伦敦),因此便宜 0%,但相同的 c5.12xlarge 在爱尔兰便宜 4.95%,而在俄勒冈州,相同的 c5.12xlarge Instance_Type 为 15.84%更便宜。我希望 SQL 中的计算值列显示 0% 和 4.95%。 15.84% 等等。

在 Excel 中我会使用以下内容

formula =(MAXIFS(A:A,B:B,B2)-A2)/MAXIFS(A:A,B:B,B2)

数据库表名为 AmazonEC2

这是它在 Excel 中工作的图像。第一张蓝色的表和SQL数据库中的数据一模一样,黑色的表代表我想用SQL实现的。

【问题讨论】:

  • 我不明白这些数字是如何计算的。例如,爱尔兰比...便宜 4.95%?
  • “但相同的 c5.12xlarge 是爱尔兰便宜 4.95%”我在图片中看到的爱尔兰位置没有关联的 c5.12xlarge。
  • 抱歉,上传图片时我没有意识到图片每隔一行就变黑了,不确定那里发生了帽子。我一定有一些透明度。爱尔兰的 c5.12xlarge 位于被涂黑的行之一。

标签: sql-server excel calculated-columns


【解决方案1】:

我认为将其作为计算列来执行并不好(甚至可能不可能)。

从 cmets 看来,PricePerUnit 的数据类型是 nvarchar()。如果是这种情况,我必须指出这是糟糕的数据库设计。我知道这可能超出您的控制范围。

无论如何,我创建了一个 AmazonEC2 表,我认为您可能拥有它。使用您的数据电子表格,我创建了插入语句,使用以下公式用您的数据填充该表。

=CONCATENATE("insert into AmazonEC2 (PricePerUnit, Instance_Type, Instance_Family, Location) values ('", A2, "', ", "'", B2, "', '", C2, "', '", D2, "')")

我将所有这些都构建到 dbfiddle 中,这样您就可以看到它的运行情况,并且这里的其他人可以操纵数据并尝试不同的方法。

这是检索数据并在检索时计算 PercentCheaper 的最终 SQL 语句。您还可以基于此 SQL 语句创建视图。

SELECT
     x.PricePerUnit
   , x.Instance_Type
   , x.Instance_Family
   , x.Location
   , FORMAT((x.MaxPricePerUnit - convert(decimal(10, 2), PricePerUnit)) / x.MaxPricePerUnit, 'P') AS PercentCheaper
FROM (
         SELECT
              PricePerUnit
            , Instance_Type
            , Instance_Family
            , Location
            , MAX(convert(decimal(10, 2), PricePerUnit)) OVER (PARTITION BY Instance_Type) AS MaxPricePerUnit
         FROM AmazonEC2
     ) x;

我们在这里所做的是获取子查询中每个 Instance_Type 的最大 PricePerUnit,我将其别名为“x”。然后我从中选择并执行计算以找到每一行的 PercentCheaper。

由于 PricePerUnit 似乎是一个 nvarchar() 列,您需要将其转换为数字才能进行计算。请注意,您不需要转换 MaxPricePerUnit,因为转换发生在它被用作 MAX() 函数的输入之前,导致输出具有十进制(10,2) 数据类型。

【讨论】:

  • 感谢您的回复。 “x”是什么意思?表示大多数命令的前缀?
  • “x”是 SQL 语句末尾的子查询的别名(名称)。你可以随心所欲(在合理范围内)。
  • 当我运行上面的代码时,我得到了错误....."Msg 402, Level 16, State 1, Line 6 The data types nvarchar and nvarchar are in compatible in the减法运算符。"
  • 您的 PricePerUnit 列和 nvarchar 数据类型是什么?如果您发布表定义甚至一些示例数据供我们使用,将会很有帮助。
  • 天哪,太棒了!!!。刚醒来,把它放到我的 SSMS 中,效果很好。在您的帮助下,我学到了很多东西。我不能告诉你我多么感谢你的支持。我只需要离开并学习一些东西,例如 (convert(decimal(10, 2) 做什么,但这是本练习的重点,在这个社区的帮助下教育自己。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多