Sql server MS SQL Server-使用SELECT语句的计算字段
我想问您是否有一条语句可以使用同一SELECT语句的计算字段: 例如: 表测试: 机器数量值 500 20Sql 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 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)