向 SQL 查询添加简单计算

Adding Simple Calculations to SQL Query

我想添加一些列来计算查询中的列。我尝试将它添加到查询的末尾,但是当我命名该列时它在“AS”处出错。此查询在没有计算步骤的情况下工作,所以可能是因为计算应该在其他地方完成?

提前感谢大家的帮助!

     SELECT * 
        FROM (SELECT DISTINCT   
         col_1,
         col_2,
         col_3,
         col_x
    CASE
         WHEN col_1 = '' THEN col_x     
           ELSE col_2 
    END AS FINISHEDCASE, 
    col_1, 
    col_2, 
    col_3,
    col_x, 
    (calc_1*(1-(calc_2/100)) AS calc_column 
         [**Desire to
         add several columns that reference selected columns, ie,col_1, 
         col_2, etc. onto the
         end of the query**]
    
    FROM TABLE_NAME 
      LEFT JOIN TABLE_NAME_2 
    ON col_a = col_b
          )as subquery

WHERE Fieldname NOT IN ('D')

查询的预期结果应如下所示

col_1、col_2、col_3、col_x、calc_column

运行 查询现在在 'AS' 子句处给出错误消息。

很多猜测你真正打算做什么,但据我了解,你喜欢计算两个计算值(calc_1calc_2),然后将它们用作中间值结果进一步计算列 (calc_column)。可以这样做:

WITH Calculated AS (SELECT col_1, col_2, col_3, col_x, (col_1 + col_2) AS calc_1, (col_3 * col_4) AS calc_2 FROM TABLE_NAME)
SELECT col_1, col_2, col_3, col_x, (calc_1*(1-(calc_2/100))) AS calc_column FROM Calculated

另一种方法是将 CROSS APPLY 与 VALUES 结合使用。然后可以返回每个计算:

SELECT ...
  FROM ...
 CROSS APPLY (VALUES (formula1, formula2)) AS c(calc_1, calc_2)
 WHERE ...

然后您可以根据需要在查询的其他任何地方使用这些计算。您甚至可以堆叠 CROSS APPLY 来计算变量,这些变量随后可用于以下 CROSS APPLY 语句。例如:

SELECT ...
  FROM ...
 CROSS APPLY (VALUES (col1 + col2, col3 + col4)) AS v(a, b)
 CROSS APPLY (VALUES (v.a * v.b)) AS e(c)