2014-02-09 100 views
0
With CTETable as 
(
    select * from table 
) 

Select * from CTETable --one time 

Select sum(column) from CTETable -- 2nd time 

Select count(column) from CTETable -- 3rd time 

請幫忙。如何使用CTE表多於一次

+2

你不能。您可以(在足夠新的版本中)使用分區函數在整個結果集中包含SUM和COUNT。您將最終得到每行中具有相同總數和計數的單個結果集。如果這是可以接受的,請這麼說(同時,請指明您的SQL Server版本) –

+0

使用VIEW代替CTE – jbaliuka

回答

1

你不能在一個以上的查詢中使用CTE。但是也可以通過爲現有CTE的Sum或Count目的製作另一個CTE並交叉連接它們來使用它。

查看下面的查詢。

With CTETable as 
(
    select * from Table 
), CTETotal As 
(
    SELECT COUNT(count) 'count' 
    from CTETable 
) 
Select * from CTETable 
CROSS JOIN CTETotal 
0

CTE只能用於一個查詢。因此,只需將單個查詢與UNION ALL結合到一個查詢中即可。您可以使用附加的虛假行來區分不同的結果集。

here for a fiddle

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 
+0

我想要顯示單獨的表格。 –

+0

@MuhammadADIL那麼不,你不能用CTE來做這件事。 CTE只能用於單個後續查詢。無論如何,這樣做的好處並不是你想象的那樣;它不是#temp表格。當你多次引用CTE時(例如在上面的UNION中),CTE可以被多次評估。 –

+0

謝謝stefan.schwetschke,但它對我來說沒有幫助。請給我另一個建議 –