2014-07-11 37 views
0

我想用CTE創建一個臨時結果集。然後我想創建另一個使用第一個結果集作爲輸入的臨時結果集。這可能嗎?下面的代碼嘗試這樣做,但我遇到了錯誤:「無效的列名'ptask_id'」 在此先感謝。CTE - 我可以使用多個臨時結果集嗎?

;WITH act_and_proc 
AS (SELECT * 
     FROM afm_roleprocs 
     WHERE role_name = 'GDI SYSTEM ADMIN'), 

ptask_list AS 
(SELECT ptask_id, 
    activity_id, 
    process_id, 
    task_file 
FROM afm_ptasks pt 
WHERE  process_id IN (SELECT process_id 
         FROM act_and_proc ap 
         WHERE  pt.process_id = ap.process_id 
          AND pt.activity_id = ap.activity_id 
          AND pt.task_type = 'WEB URL' 
          AND pt.security_group != 'SYS-HIDDEN' 
          AND pt.is_hotlist = 0) 
    AND process_id IN (SELECT process_id 
         FROM afm_processes 
         WHERE process_id = pt.process_id AND is_active = 1) 
) 

select * from ptask_list 
+2

該錯誤與CTE無關 - 這意味着表'afm_ptasks'沒有名爲'ptask_id'的列。無論如何,CTE不會創建臨時結果集。它們只是整個查詢的一個語法元素。查詢分析器將處理整個查詢並決定如何執行它 –

+0

爲什麼不把它放在答案中,@PanagiotisKanavos –

+1

[保持簡單以及如何在查詢中執行多個CTE](http:// stackoverflow。 com/questions/2140750 /保持簡單並且如何做到多個cte-in-a-query) – usr

回答

1

當然可以。語法如下所示。

with MyCte as 
(
    Select SomeColumns from SomeTable 
) 
, MyNextCte as 
(
    Select OneColumn from MyCte 
) 

select * from MyNextCte 
相關問題