我想问你是否有声明使用相同SELECT语句的计算字段:
例如:
表测试:
机器金额值 500 20 20
$sql = "SELECT * FROM comments LIMIT 1 OFFSET $commentNewCount";
重复使用此计算字段的正确陈述是什么?
提前致谢,
凯文
答案 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)