2013-06-10 25 views
7

Tôi đã tìm kiếm câu hỏi này tại đây nhưng không thể tìm thấy câu hỏi này, vui lòng chuyển hướng cho tôi nếu chúng tôi đã có câu hỏi trên trang web.Cách tạo CTE sử dụng CTE khác làm dữ liệu để hạn chế thêm?

Tôi đang tìm cách tạo CTE sử dụng CTE khác làm dữ liệu để giới hạn thêm. Tôi có một CTE tạo báo cáo cho tôi, nhưng tôi muốn thu hẹp báo cáo này với một đầu vào khác bằng CTE hiện có.

Tôi hy vọng câu hỏi của tôi là rõ ràng.

+0

Những phương ngữ SQL là điều này? – hvd

+0

Cái tôi đang sử dụng là phương ngữ 3 – curiousBoy

Trả lời

17

Bạn có thể chuỗi 2 (hoặc nhiều) CTE lại với nhau.

Ví dụ

with ObjectsWithA as 
(
    select * from sys.objects 
    where name like '%A%' 
), 
ObjectsWithALessThan100 as 
(
    select * from ObjectsWithA 
    where object_id < 100 
) 
select * from ObjectsWithALessThan100; 
+0

Cảm ơn rất nhiều, hoạt động như một nhà vô địch :) – curiousBoy

8

Một CTE có thể tham khảo CTEs trước:

with report as (
     <your query here> 
    ), 
    reportLimited as (
     select * 
     from report 
     where foo = @bar 
    ) 
select * 
from reportLimited 

Nguyên tắc duy nhất là tài liệu tham khảo phải tuần tự. Không có tham chiếu về phía trước.

+0

Cảm ơn bạn rất nhiều – curiousBoy

5

Chắc chắn, chỉ cần tham khảo các CTE trực tiếp:

WITH Source As 
( 
    SELECT * FROM AllData 
), 
Filtered AS 
(
    SELECT * FROM Source WHERE ID = 4 
) 
SELECT * FROM Filtered 
+0

Cảm ơn bạn đã đề xuất, đánh giá cao điều đó. – curiousBoy

0
WITH 
Source ---------1--------- 
As 
( 
    SELECT * FROM emp 
), 
destination----2---------- 
AS 
(
    SELECT * 
    FROM Source 
    WHERE E_id = 4 
) 

SELECT * FROM destination 
+2

Bạn có thể giải thích những gì bạn đã làm không? –

+0

Trong khi câu trả lời của bạn có thể giải quyết được câu hỏi, nó luôn luôn tốt hơn nếu bạn có thể cung cấp một mô tả về vấn đề là gì và cách câu trả lời của bạn giải quyết nó. Đây là một gợi ý để tiếp tục cải thiện câu trả lời này và trong tương lai. –

+0

@sangu patil: Tôi không thể thấy bất kỳ sự khác biệt nào giữa câu hỏi này và các cặp vợ chồng khác đã đưa ra câu trả lời! Trước khi bạn đăng câu trả lời, hãy đảm bảo câu trả lời chưa được đăng! Nếu không, nó chỉ là một "lũ lụt" và làm cho người khác tìm thấy những lựa chọn thay thế khó khăn hơn. – curiousBoy

Các vấn đề liên quan