我想简化我的T-SQL查询。就像这样:
SELECT
t.a AS [Column A],
t.b AS [Column B],
t.c AS [Column C],
(t.a - t.b - t.c) AS [Column D],
CASE
WHEN (t.a - t.b - t.c) = 0 THEN 'Equals'
WHEN (t.a - t.b - t.c) > 0 THEN 'Greater'
WHEN (t.a - t.b - t.c) < 0 THEN 'Less'
END AS [Status]
FROM
Table1 AS t;
将(t.a - t.b - t.c)
放入变量会很好,所以我可以在它出现的所有位置重复使用它,因为表达式可能会随着时间而改变。
如果不显着改变现有查询,我无法弄清楚如何做到这一点。
答案 0 :(得分:5)
使用Cross Apply
SELECT
t.a AS [Column A],
t.b AS [Column B],
t.c AS [Column C],
[Column D],
CASE
WHEN [Column D] = 0 THEN 'Equals'
WHEN [Column D] > 0 THEN 'Greater'
WHEN [Column D] < 0 THEN 'Less'
END AS [Status]
FROM
Table1 AS t
CROSS APPLY (SELECT t.a - t.b - t.c AS [Column D]) AS t2
答案 1 :(得分:1)
您可以像这样使用CTE(公用表格式):
;WITH CTE AS
(
SELECT
t.a AS [Column A],
t.b AS [Column B],
t.c AS [Column C],
(t.a - t.b - t-c) AS [Column D]
FROM
Table1 AS t
)
SELECT
[Column A],
[Column B],
[Column C],
[Column D],
CASE
WHEN [Column D] = 0 THEN 'Equals'
WHEN [Column D] > 0 THEN 'Greater'
WHEN [Column D] < 0 THEN 'Less'
END AS [Status]
FROM
CTE
这定义了一个CTE - 类似于“ad-hoc”视图 - 您可以使用它来处理计算,聚合等事情,然后从中进行选择(或使用其他SQL语句)。 CTE仅存在于下一个语句中 - 它不会因多个SQL语句而“持久化”。但处理这样的情况非常方便
答案 2 :(得分:-1)
我不知道你的问题是什么。但这里有一些信息给你。
如果使用SQL Server,则可以将查询的返回值分配给如下变量:
SELECT @var = value
FROM yourTable
但要注意,如果结果中有多行,则只会将最后一行用于变量。
如果您只想使用(t.a - t.b - t.c)
语句节省电量,那么它将不再必要,因为SQL Server将仅对这些表达式进行一次评估,并对每个WHEN
进行数据比较,直到一场比赛。