sql - 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......)
在我希望存储的每个变量的最顶部?
解决方案
您可以使用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
的语法。
推荐阅读
- javascript - Javascript使用复选框选择表格的整行(更改背景颜色)并在单击下一个复选框时取消选择
- python - 在 zipline 上运行回测时如何解决 AssertionError
- wordpress - WP / 在网站的不同部分显示不同的帖子
- python-3.x - 使用 plotly 或 pandas 在烛台图上识别和提取 OHLC 模式?
- reactjs - React App:HashRouter 中的 Map 在迭代组件时遇到问题
- stored-procedures - 在同一用户的地址列表中获取默认地址的存储过程
- java - 无法为 CXF 项目执行 maven docker jar
- c# - C# 在 Selenium 中为 Chrome 驱动程序设置代理 ID 通过登录
- c++ - 为什么我不能在 mac 上包含一些来自 C++17 的标头
- r - is.null 在列表与其他对象上