我正在整理一个很长的查询,经过多次实验后我发现只能通过子查询来完成。
子查询针对包含财务周期列表的根表进行连接。我想通过引用 where 子句中的子查询来过滤结果,而不重复子查询。
IE:
Select Year
, Period
, (Select.... ) as Col1
, (Select.... ) as Col2
, (Select.... ) as Col3
Where Col1 > 0 or Col2 > 0 or Col3 > 0
我知道我无法通过给定名称引用子查询,并且我已经研究过通过数字引用,但没有看到任何 promise 。我最终所做的是将查询放入存储过程中,该存储过程使用它来填充临时表,并使用适当的 where 子句从中进行选择。
Select .... into #Temp
Select * From #Temp Where Col1 > 0 or Col2 > 0 or Col3 > 0
有没有更干净或更有效的方法来解决这个问题?
有什么想法吗?
最佳答案
如果您使用的是 SQL Server 2005 或更高版本,则可以 use a CTE :
;WITH Result (Year, Period, Col1, Col2, Col3) AS
(
Select Year, Period, (Select.... ) as Col1, (Select.... ) as Col2...
)
Select *
From Result
Where Col1 > 0 or Col2 > 0 or Col3 > 0
或者,如果您使用的版本不支持 CTE,则可以将查询视为中间结果,然后使用应用过滤的外部查询:
Select
*
from
(
Select Year, Period, (Select.... ) as Col1, (Select.... ) as Col2...
) q
Where Col1 > 0 or Col2 > 0 or Col3 > 0
关于sql - 如何在 where 子句中使用预先使用的子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9120212/