使用变量

时间:2015-06-19 07:52:44

标签: sql sql-server variables simplify

我想简化我的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)放入变量会很好,所以我可以在它出现的所有位置重复使用它,因为表达式可能会随着时间而改变。 如果不显着改变现有查询,我无法弄清楚如何做到这一点。

3 个答案:

答案 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进行数据比较,直到一场比赛。