我需要做這樣的事情,但SQL Server 2008不喜歡它。我的查詢實際上比這更復雜,我意識到這不是完成我在做什麼的最好方法,但我的重點是WITH語句的功能,而不是select和where語句。可以在TSQL中兩次使用WITH來篩選結果集,就像我的示例一樣?
與stuff1 AS( 選擇名稱,開始日期,編號從員工那裏開始日期> 0)
WITH stuff2 AS( 選擇名稱,開始日期,編號從stuff1)SELECT * FROM stuff2其中id> 10
我需要做這樣的事情,但SQL Server 2008不喜歡它。我的查詢實際上比這更復雜,我意識到這不是完成我在做什麼的最好方法,但我的重點是WITH語句的功能,而不是select和where語句。可以在TSQL中兩次使用WITH來篩選結果集,就像我的示例一樣?
與stuff1 AS( 選擇名稱,開始日期,編號從員工那裏開始日期> 0)
WITH stuff2 AS( 選擇名稱,開始日期,編號從stuff1)SELECT * FROM stuff2其中id> 10
我做這一切的時候:
WITH stuff1 AS (
SELECT name
,startdate
,id
FROM employees
WHERE startdate > 0
)
,stuff2 AS (
SELECT name
,startdate
,id
FROM stuff1
)
SELECT *
FROM stuff2
WHERE id > 10
至於我可以告訴大家,我還沒有達到在熱膨脹係數的限制。
你不能這樣做的唯一的事情(這將是非常有用的)是獨立的SELECT
小號重用熱膨脹係數:
WITH stuff1 AS (
SELECT name
,startdate
,id
FROM employees
WHERE startdate > 0
)
,stuff2 AS (
SELECT name
,startdate
,id
FROM stuff1
)
SELECT *
FROM stuff2
WHERE id > 10
;
SELECT *
FROM stuff2
WHERE id < 10
說。相反,您必須再次複製並粘貼整個CTE鏈。
不,你可以在一個聲明中只有一個CTE,因爲我在前幾天發現。
編輯:那WITH語句是一個公共表表達式,非常方便的功能。
實際上,您可以擁有多個CTE,並且它們可以互相構建,甚至可以在CTE鏈中構建多個CTE,使用逗號分隔 - 只有一個WITH語句可以使用。 – 2009-01-28 21:04:49
我沒有意識到他們必須用逗號分隔。這將很方便。我一直在閱讀我的SQL 2008書,他們提到了CTE,但他們沒有提到在一個查詢中使用多個CTE,這是一個恥辱。 – Kezzer 2009-01-28 21:24:33
是的,我在下面發佈了一個例子。去年我在3GL系統的一個端口上使用它非常繁重。 – 2009-01-28 21:28:41
您可以向我們提供一系列的子查詢。 嵌套在CTE中的子查詢。
子查詢的示例使用羅斯文:
SELECT * FROM
(SELECT * FROM
(SELECT * FROM dbo.Employees WHERE Country = 'USA') as TableFiltered1
) AS TableFilterd2 WHERE City = 'Seattle'
您可以使用兩種熱膨脹係數,但也許不是你想,看到的樣子:
http://www.4guysfromrolla.com/webtech/071906-1.shtml
Theres在使用臨時表格或表格變量時不需要任何羞愧 – Juliet 2009-01-28 20:07:19