首页 > 解决方案 > SQL Server - 将计算应用于各种列的嵌套 SELECT

问题描述

我当前的查询非常简单,看起来像这样:SELECT TOP 100 * FROM METRICS。我需要更改查询以从表中获取相同的列,但还要对一些保留相同列名的列应用计算。

例如,此函数CONVERT(INT, HASHBYTES('SHA2_256', metric_1)) % 10将应用于列metric_1和列。(metric_2 * 0.9) / 100metric_2

这似乎需要一个嵌套的 SELECT 语句。但是结合上面的语句应该怎么看呢?

我只需要保留所有现有列的原始名称,只需更改应用函数的某些列的值。大约有 100 列,因此在这种情况下,在 SELECT 中列出每一列将不起作用。而且我对该表具有只读访问权限,因此不能使用 ALTER 语句。

标签: sqlsql-serverhash

解决方案


您可以通过在列列表中添加表达式,根据需要将列添加到结果集中。例如,您可以这样做:

SELECT TOP 100
  *,
  CONVERT(INT, HASHBYTES('SHA2_256', metric_1)) % 10 as formula1,
  (metric_2 * 0.9) / 100 as formula2
FROM METRICS
ORDER BY ...

此查询提供所有现有列以及两个额外列:formula1formula2.

现在,如果要替换现有列,则需要省略*. 例如:

SELECT TOP 100
  CONVERT(INT, HASHBYTES('SHA2_256', metric_1)) % 10 as metric_1,
  (metric_2 * 0.9) / 100 as metric_2
FROM METRICS
ORDER BY ...

推荐阅读