首页 > 解决方案 > T-SQL 在更大的 SELECT 语句中创建变量?有更快的方法吗?

问题描述

假设我有世界上最简单的 2 个表作为我的数据:

第一个表如下所示:

在此处输入图像描述

第二个表如下所示:

在此处输入图像描述

然后假设我在 T-SQL 中有以下语句

SELECT  
    T1.Column1 + T2.Column1 AS 'AddedColumns'
FROM 
    Table1 AS T1, Table2 AS T2 

所以我的结果应该显示一个带有值的列: 6 和 9 我已别名为“AddedColumns”

假设为了论证,我想将表 1 中的第 2 列添加到“添加的列”中,我该怎么做?

我理解的一种方法是在顶部声明变量,但这需要复制 SELECT、FROM 以及关键的我标记的 WHERE 语句。有没有办法做类似的事情:

SELECT  
    T1.Column1 + T2.Column AS 'AddedColumns',
    'AddedColumns' + T2.Column2 AS 'Double Added'
FROM 
    Table1 AS T1, Table2 AS T2 

还是我只需要做类似的事情:

Declare @NewVariable Int = SELECT (..... FROM ....... WHERE......)

在我希望存储的每个变量的最顶部?

标签: sqltsql

解决方案


您可以使用cross apply

SELECT v.AddedColumn,
       v.AddedColumn + T2.Column2 AS [Double Added]
FROM Table1 T1 CROSS JOIN
     Table2 T2 CROSS APPLY
     (VALUES (T1.Column1 + T2.Column)) v(AddedColumn);

一些建议:

  • 切勿对列别名使用单引号。仅对字符串和日期常量使用单引号。
  • 切勿在FROM子句中使用逗号。 始终使用正确、明确、标准 JOIN的语法。

推荐阅读