我正在整理一个长期的查询,经过多次实验,我发现我只能通过子查询来完成。
子查询将与包含财务期间列表的根表连接。我想通过引用where子句中的子查询来过滤结果,而不重复子查询。
IE:
Select Year
, Period
, (Select.... ) as Col1
, (Select.... ) as Col2
, (Select.... ) as Col3
Where Col1 > 0 or Col2 > 0 or Col3 > 0
我知道我不能用给定的名称引用子查询,我已经考虑过用数字引用,但是没有看到任何承诺。我最终做的是将查询放在一个存储过程中,该过程使用它来填充临时表并从具有相应where子句的表中进行选择。
Select .... into #Temp
Select * From #Temp Where Col1 > 0 or Col2 > 0 or Col3 > 0
是否有更清洁或更有效的方法来解决这个问题?
有什么想法吗?
答案 0 :(得分:4)
如果您使用的是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