在SQL Server中引用多个临时表的结果

时间:2015-09-14 15:07:32

标签: sql-server subset

我正在使用SQL Server 2008

我的连接编写如下所示,其中第一个连接封装在'With as'语句中,以便我可以将输出表命名为'A',然后在下一个选择中引用'A'结果表并加入其中。

这完全没问题。我想要做的是引用另一个select语句和join的第二个表,但是当我尝试将它包装在'With as'语句中时,编辑器不接受它作为第二个实例的合法语法'随着'。

如何在更进一步的select和join语句中对结果表进行子集化?我没有写入数据库的权限,因此我无法在数据库中创建永久表。

谢谢。

With A as
(
SELECT POL.[COMPANY_CODE]
      ,POL.[POLICY_NUMBER]
      ,POL.[STATUS_CODE]
      ,POL.ORIG_CLIENT_NUM 
      ,TA.LINE 

 FROM [SamsReporting].[dbo].[POLICY] POL

 Left join [SamsReporting].[dbo].[Transact] TA
 ON TA.POLICY_NUMBER = POL.POLICY_NUMBER and TA.BASE_Account = 'B' 
)


 Select PM.POLICY_NUMBER
       ,A.[COMPANY_CODE]
      ,A.[POLICY_NUMBER]
      ,A.[Policy Status]
      ,eApp.SourceCode



  From A

Left Join Web.dbo.Pmetrics PM on A.POLICY_NUMBER=PM.POLICY_NUMBER

Left Outer Join DDP.pol.eAppStaging eApp
on A.POLICY_NUMBER=eApp.PolicyNumber

where eApp.SourceCode = 'HAQ' or eApp.SourceCode = 'PLS'

2 个答案:

答案 0 :(得分:2)

公用表表达式(CTE)可以根据需要相互构建。例如,您可以这样做:

WITH CTE1 AS (SELECT * FROM Table 1)
, CTE2 AS (SELECT * FROM CTE1)
, CTE3 AS (SELECT * FROM CTE2)

您只需要第一个CTE的WITH语句。之后只需使用CTE名称,如我的例子所示。

希望有所帮助,

答案 1 :(得分:0)

对我来说听起来像语法问题。谷歌CTE(通用表格表达),并审查它们如何形成的一些例子。

With A as
     (SELECT POL.[COMPANY_CODE]
      ,POL.[POLICY_NUMBER]
      ,POL.[STATUS_CODE]
      ,POL.ORIG_CLIENT_NUM 
      ,TA.LINE 

      FROM [SamsReporting].[dbo].[POLICY] POL
      Left join [SamsReporting].[dbo].[Transact] TA
          ON TA.POLICY_NUMBER = POL.POLICY_NUMBER and TA.BASE_Account = 'B'),
     B as (
      Select PM.POLICY_NUMBER
       ,A.[COMPANY_CODE]
       ,A.[POLICY_NUMBER]
       ,A.[Policy Status]
       ,eApp.SourceCode  
      From A
      Left Join Web.dbo.Pmetrics PM on A.POLICY_NUMBER=PM.POLICY_NUMBER
      Left Outer Join DDP.pol.eAppStaging eApp
         on A.POLICY_NUMBER=eApp.PolicyNumber
      where eApp.SourceCode = 'HAQ' or eApp.SourceCode = 'PLS')

Select *
From B -- inner join some table
where some condition = 1