Sql server 2008 如何组合两个不同的CTE

Sql server 2008 如何组合两个不同的CTE,sql-server-2008,Sql Server 2008,为了简单起见,我举了以下示例: ;WITH myCTE (CustID, Co) AS ( SELECT CustomerID, CompanyName FROM Customers ) SELECT CompanyName FROM Customers WHERE CustomerID = 'ALFKI' union all --this does not work with two With statements ;WITH myCTE2 (CustID, Co) AS ( SELECT

为了简单起见,我举了以下示例:

;WITH myCTE (CustID, Co) AS
(
SELECT CustomerID, CompanyName FROM Customers
)
SELECT CompanyName FROM Customers WHERE CustomerID = 'ALFKI'

union all --this does not work with two With statements

;WITH myCTE2 (CustID, Co) AS
(
SELECT CustomerID, CompanyName FROM Customers
)
SELECT CompanyName FROM Customers WHERE CustomerID = 'BBICT' 
编辑:

假设OP选择了一个糟糕的例子

否则,所需要的就是

SELECT CompanyName FROM Customers WHERE CustomerID IN ('ALFKI', 'BBICT' )

您只需将两个查询分开:

;WITH myCTE (CustID, Co) AS
(
SELECT CustomerID, CompanyName FROM Customers
)
,
myCTE2 (CustID, Co) AS
(
SELECT CustomerID, CompanyName FROM Customers
)
SELECT CompanyName FROM Customers WHERE CustomerID = 'BBICT'
UNION
SELECT CompanyName FROM Customers WHERE CustomerID = 'ALFKI'

这可能不是最好的示例代码,因为您可以将2个where子句组合成1(即CustomerID='ALFKI'或CustomerID='BBICT')。这可能是多个CTEST的重复。这是两个单独的查询。这不是OP想要的。在联盟被认为是CTE DML的一部分后,我没有意识到第二个select声明…非常酷,谢谢。
;WITH myCTE (CustID, Co) AS
(
SELECT CustomerID, CompanyName FROM Customers
)
,
myCTE2 (CustID, Co) AS
(
SELECT CustomerID, CompanyName FROM Customers
)
SELECT CompanyName FROM Customers WHERE CustomerID = 'BBICT'
UNION
SELECT CompanyName FROM Customers WHERE CustomerID = 'ALFKI'