Sql server 在SQL Server中引用多个临时表的结果
我正在使用SQLServer2008 我编写了如下连接,其中第一个连接封装在“With as”语句中,这样我就可以将输出表命名为“a”,然后在下面看到的下一个选择和连接中引用“a”结果表 这个很好用。然后我想做的是为另一个select语句和join引用第二个表,但是当我尝试将其包装在“With-as”语句中时,编辑器不接受它作为“With-as”第二个实例的合法语法 如何将生成的表子集以在进一步的select和join语句中引用?我没有写入数据库的权限,因此无法在数据库中创建永久表 多谢各位Sql server 在SQL Server中引用多个临时表的结果,sql-server,subset,Sql Server,Subset,我正在使用SQLServer2008 我编写了如下连接,其中第一个连接封装在“With as”语句中,这样我就可以将输出表命名为“a”,然后在下面看到的下一个选择和连接中引用“a”结果表 这个很好用。然后我想做的是为另一个select语句和join引用第二个表,但是当我尝试将其包装在“With-as”语句中时,编辑器不接受它作为“With-as”第二个实例的合法语法 如何将生成的表子集以在进一步的select和join语句中引用?我没有写入数据库的权限,因此无法在数据库中创建永久表 多谢各位 W
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'
听起来像是个语法问题。谷歌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
公共表表达式(CTE)可以按照您的意愿彼此构建。例如,您可以执行以下操作:
WITH CTE1 AS (SELECT * FROM Table 1)
, CTE2 AS (SELECT * FROM CTE1)
, CTE3 AS (SELECT * FROM CTE2)
对于第一个CTE,您只需要WITH语句。之后,只需使用CTE名称,如我的示例中所示
希望有帮助
AshAsh和RwKing,谢谢你们两位。我认为用删除第二个字符并在中间添加逗号解决了这个问题。很高兴它起到了作用。请接受一个作为答案,这样问题就结束了。没问题@lionrunner谢谢你的回答。