【发布时间】:2016-10-28 21:46:50
【问题描述】:
这听起来像是一个愚蠢的问题 - 抱歉,我是 SQL Server 的新手,我只是想确认我的理解。 我有一个查询,它以不同的方式将表中的值聚合为子查询,用于不同的列,例如对于给定日期的交易,上个月、前 6 个月、之前、之后的交易。
我将主表别名为tx,然后将子查询别名为tx1,因此我可以使用例如:
tx1.TransactionDate < tx.TransactionDate
我创建了一列,复制它并修改了WHERE 条件。
我假设子查询中别名的范围绑定到该子查询,因此在每种情况下别名是否相同并不重要。
它似乎有效,但是由于主表 tx 和子查询表 tx1 都没有改变,我不知道别名 tx1 的范围是否绑定到每个子查询,或者初始tx1 正在被重复使用。
我的假设是否正确?
查询:
SELECT tr.transaction_value ,
Isnull(
(
SELECT Sum(tr1.transaction_value)
FROM [MyDB].[dbo].[Transactions] tr1
WHERE tr1.client_ref = tr.client_ref),0)
and tr1.transaction_date > tr.transaction_date ),0) AS 'Future_Transactions' ,isnull(
(
SELECT sum(tr1.transaction_value)
FROM [MyDB].[dbo].[Transactions] tr1
WHERE tr1.client_ref = tr.client_ref),0)
AND
tr1.transaction_date < tr.transaction_date ),0) AS 'Prior_Transactions' FROM [MyDB].[dbo].[Transactions]
【问题讨论】:
-
问题中的邮政编码。我已经编辑了你的问题。这是一个可以帮助你的相关帖子:stackoverflow.com/questions/188828/sql-table-alias-scope
标签: sql sql-server tsql sql-server-2012