假设我有世界上最简单的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......)
在每个要存储的变量的最顶部?
答案 0 :(得分:1)
您可以使用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
语法。答案 1 :(得分:1)
戈登的示例可能就是您想要的,但是您可能想使用SQL的另一个功能,称为CTE-CTE是可以作为表重新使用的子查询。考虑下面的代码。
WITH table_a_and_square as
(
SELECT a.col1, a.col2, a.col1*a.col1 as col1_sqr
FROM tablea as a
), table_a_and_cube as
(
SELECT col1, col1_sqr*col1_sqr as col1_cube
FROM table_a_and_square
)
SELECT ... -- a select statement with those two tables.
关于CTE的一些好处
答案 2 :(得分:0)
为什么不简单地这样呢?
using (Session session = new Session())
{
string FileFullPath =
Dts.Variables["User::FTP_FileFullPath"].Value.ToString();
session.Open(sessionOptions);
DateTime dateTime = DateTime.Now;
session.MoveFile(FileFullPath, newFTPFullPath);
TransferOperationResult transferResult;
transferResult = session.GetFiles(newFTPFullPath,
Dts.Variables["User::Local_DownloadFolder"].Value.ToString(),false);
Dts.Variables["User::FTP_FileProcessDate"].Value = dateTime;
}