Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MS SQL Server-使用SELECT语句的计算字段_Sql Server_Sql Server 2008 - Fatal编程技术网

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

Sql server MS SQL Server-使用SELECT语句的计算字段,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我想问您是否有一条语句可以使用同一SELECT语句的计算字段: 例如: 表测试: 机器数量值 500 20 SELECT Machine, Amount*Value AS TestFormula TestFormula*12 AS TestFormulaYear FROM Test 重用此计算字段的正确语句是什么 提前感谢, Kevin至少在sql server中,您可以通过子查询来完成: SELECT Machine , TestFormula ,

我想问您是否有一条语句可以使用同一SELECT语句的计算字段:

例如:

表测试:

机器数量值 500 20

SELECT Machine, 
    Amount*Value AS TestFormula
    TestFormula*12 AS TestFormulaYear
FROM Test
重用此计算字段的正确语句是什么

提前感谢,


Kevin

至少在sql server中,您可以通过子查询来完成:

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

至少在sql server中,您可以通过子查询执行此操作:

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

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

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

其他答案已经说明了如何使用子查询来真正重用列,但与我上面所写的相比,这并不是很好。

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

SELECT
    Machine, 
    Amount*Value AS TestFormula,
    Amount*Value*12 AS TestFormulaYear
FROM Test;
其他答案已经说明了如何使用子查询来真正重用列,但与我上面所写的相比,这并不是很有效。

您可以使用子查询来重用值:

WITH formula AS (
    SELECT Machine, 
        Amount*Value AS TestFormula
    FROM Test
    )
SELECT Machine, 
    TestFormula
    TestFormula*12 AS TestFormulaYear
FROM formula;
如果带有CTE的批处理包含多个语句,则前面的语句必须以分号终止。

您可以使用a来重用该值:

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

如果带有CTE的批处理包含多条语句,则前面的语句必须以分号终止。

假设这是T-SQL:

您不能在
SELECT
语句中引用列的别名,否。如果查看,您会注意到SELECT是要处理的查询的第8部分。这意味着只有
orderby
才能引用列的别名

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

重复计算:

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

SELECT [Column] * 10 As Expression,
       [Column] * 10 * 5 AS Expression2
FROM [Table];
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;

假设这是T-SQL:

您不能在
SELECT
语句中引用列的别名,否。如果查看,您会注意到SELECT是要处理的查询的第8部分。这意味着只有
orderby
才能引用列的别名

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

重复计算:

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

SELECT [Column] * 10 As Expression,
       [Column] * 10 * 5 AS Expression2
FROM [Table];
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;

如果您希望设置一个语句,以便在更改公式时更新许多列,我想您可以声明公式并使用动态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)

如果您希望设置一个语句,以便在更改公式时更新许多列,我想您可以声明公式并使用动态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)