Sql 如何多次使用CTE表

Sql 如何多次使用CTE表,sql,sql-server,Sql,Sql Server,请提供帮助。CTE只能用于一个查询。因此,只需使用UNION ALL将单个查询连接到一个查询中即可。您可以使用附加的人工行来区分不同的结果集 见: 不能在多个查询中使用CTE。但是,您也可以通过从现有CTE生成另一个用于求和或计数目的的CTE并交叉连接它们来使用它 请参见下面的查询 With CTETable as ( select * from TestTable ) Select '*',* from CTETable --one time UNION ALL Select 'sum'

请提供帮助。

CTE只能用于一个查询。因此,只需使用
UNION ALL
将单个查询连接到一个查询中即可。您可以使用附加的人工行来区分不同的结果集

见:


不能在多个查询中使用CTE。但是,您也可以通过从现有CTE生成另一个用于求和或计数目的的CTE并交叉连接它们来使用它

请参见下面的查询

With CTETable as
(
   select * from TestTable
)
Select '*',* from CTETable --one time
UNION ALL
Select 'sum', sum(col) from CTETable -- 2nd time
UNION ALL
Select 'count', count(col) from CTETable -- 3rd time

你不能。您可以(在足够现代的版本中)使用分区函数在整个结果集中包含
SUM
s和
COUNT
。您将得到一个结果集,每行的总和和计数都相同。如果这是可以接受的,那么就这样说(同时指出您的SQL Server版本)使用视图而不是CTE@MuhammadADIL那么不,你不能用CTE来做这件事。CTE只能在单个后续查询中使用。无论如何,这样做的好处并不是你认为的那样;这不是一张临时桌。当您多次引用CTE时(例如,在上面的联合体中),可以对CTE进行多次评估。谢谢stefan.schwetschke,但这对我没有帮助。请给我另一个建议我正在使用变量表执行此任务,它工作正常,但CTE table我们不能使用超过一个:(@AaronBertrand,我现在可以理解了。谢谢!而且,当源表中有多个列时,这会中断,因为联合将具有不同的列数。
With CTETable as
(
   select * from TestTable
)
Select '*',* from CTETable --one time
UNION ALL
Select 'sum', sum(col) from CTETable -- 2nd time
UNION ALL
Select 'count', count(col) from CTETable -- 3rd time
With CTETable as
(
   select * from Table
), CTETotal As 
(
   SELECT COUNT(count) 'count' 
   from CTETable
) 
Select * from CTETable 
CROSS JOIN CTETotal