MS SQL Server - 使用SELECT语句的计算字段

时间:2018-02-14 10:43:08

标签: sql-server sql-server-2008

我想问你是否有声明使用相同SELECT语句的计算字段:

例如:

表测试:

机器金额值 500 20 20

$sql = "SELECT * FROM comments LIMIT 1 OFFSET $commentNewCount";

重复使用此计算字段的正确陈述是什么?

提前致谢,

凯文

5 个答案:

答案 0 :(得分:1)

至少在sql server中,您可以使用子查询来执行此操作:

SELECT  Machine 
,       TestFormula
,       TestFormula*12 AS TestFormulaYear
FROM    (
           SELECT Machine 
           ,      Amount*Value AS TestFormula
           FROM   Test
        ) T

答案 1 :(得分:1)

对于您向我们展示的简单示例,我建议您重复使用表达式

SELECT
    Machine, 
    Amount*Value AS TestFormula,
    Amount*Value*12 AS TestFormulaYear
FROM Test;

其他答案已经展示了如何使用子查询来真正重用列,但与上面所写的相比,这不是很有效。

答案 2 :(得分:1)

您可以使用common-table expression (CTE)重复使用该值:

WITH formula AS (
    SELECT Machine, 
        Amount*Value AS TestFormula
    FROM Test
    )
SELECT Machine, 
    TestFormula
    TestFormula*12 AS TestFormulaYear
FROM formula;

如果包含CTE的批处理包含多个语句,则前面的语句必须以分号结束。

答案 3 :(得分:0)

假设这是T-SQL:

您无法在SELECT语句中引用列的别名,no。如果查看SELECT (Transact-SQL),您会注意到SELECT是要处理的查询的第8部分。这意味着只有ORDER BY才能引用列的别名。

如果需要对计算值进行进一步计算,则需要使用CTE,子查询或重新计算计算。例如:

重复计算:

SELECT [Column] * 10 As Expression,
       [Column] * 10 * 5 AS Expression2
FROM [Table];

<强> CTE:

WITH Formula AS(
    SELECT [Column] * 10 As Expression
    FROM [Table])
SELECT Expression,
       Expression * 5 AS Expression2
FROM Formula;

子查询:

SELECT Expression,
       Expression * 5 AS Expression2
FROM (SELECT [Column] * 10 As Expression
      FROM [Table]) Formula;

答案 4 :(得分:0)

如果您要设置一个Statement,以便在更改公式时会更新许多列,我想您可以声明公式并使用Dynamic SQL。如果您想确保正确更新大量列,则可以有一个优势:

Declare @TestFormula as nvarchar(100) = '([Amount]*[Value])'
Declare @TestFormulaYear as nvarchar(100) = '(12*' + @TestFormula + ')'
declare @sql as nvarchar(max)
set @sql = 'SELECT [Machine], ' + @TestFormula + ' AS TestFormula, ' + @TestFormulaYear + ' AS TestFormulaYear
FROM (values(500, 20, 20)) a([Machine], [Amount], [Value])'
exec(@sql)