2016-10-04 46 views
1

我一直在編寫這最後一個問題,並且該文件將在明天由我的SQL Server數據庫類來處理。SQL Server Adventureworks中的公用表表達式出現問題

我應該創建一個CTE,它將創建Employee表中所有女性員工的業務狀況和性別的臨時表。然後從人員類型爲「EM」的人員名單,員工姓名和人員類型中返回CTE的businessentityid &性別

我的代碼我已將所有性別標籤簡單地轉換爲F和將PersonType更改爲EM,這在我從頭開始的多少次中幾乎變得滑稽。

WITH cte_name2 AS 
(
    SELECT   
     FirstName, LastName, PersonType 
    FROM    
     Person.Person 
), cte_name1 AS 
(
    SELECT   
     Gender, BusinessEntityID 
    FROM    
     HumanResources.Employee 
) 
SELECT   
    cte_name1_1.BusinessEntityID, cte_name1_1.Gender, 
    cte_name2_1.FirstName, cte_name2_1.LastName, cte_name2_1.PersonType 
FROM    
    cte_name1 AS cte_name1_1 
CROSS JOIN 
    cte_name2 AS cte_name2_1 
WHERE   
    (NOT (cte_name1_1.Gender LIKE N'M')) 
    AND (cte_name2_1.PersonType = N'EM') 

誰能告訴我我做錯了什麼?謝謝。

+0

您需要將BusinessEntityID添加到cte_name2,然後主查詢是BusinessEntityId上的cte_name1和cte_name2之間的內部聯接 – Jayvee

+0

我提出了您建議的更改,但CROSS JOIN不會更改爲INNER JOIN,WHERE子句變爲紅色。 –

+0

您可能需要添加連接謂詞ON:join ... ON cte_name2_1.BusinessEntityID = cte_name1_1.BusinessEntityID,對不起,我無法爲您提供完整的解決方案,因爲我們不應該爲作業做這些工作 – Jayvee

回答

2

正確的代碼如下...

WITH cte_name2 AS 
(
    SELECT   
     BusinessEntityID, FirstName, LastName, PersonType 
    FROM    
     Person.Person 
), cte_name1 AS 
(
    SELECT   
     Gender, BusinessEntityID 
    FROM    
     HumanResources.Employee 
) 
SELECT   
    cte_name1_1.BusinessEntityID, cte_name1_1.Gender, 
    cte_name2_1.FirstName, cte_name2_1.LastName, cte_name2_1.PersonType 
FROM    
    cte_name1 AS cte_name1_1 
INNER JOIN 
    cte_name2 AS cte_name2_1 ON cte_name2_1.BusinessEntityID = cte_name1_1.BusinessEntityID 
WHERE   
    (cte_name1_1.Gender NOT LIKE N'M') 
    AND (cte_name2_1.PersonType = N'EM') 

原來我是非常密切和二隊幫了我不少!

相關問題