在SQL Server Adventureworks中遇到公用表表达式问题

时间:2016-10-04 21:35:48

标签: sql sql-server-2012 adventureworks

我整天都在编码这个最后一个问题,明天将为我的SQL Server数据库类编写该文件。

我应该创建一个CTE,它将创建一个临时表,其中包含来自Employee表的所有女性员工的业务代表和性别。然后返回businessentityid&来自CTE的性别以及人员类型为“EM”的人员表中的员工姓名,员工姓氏和人员类型

我的代码我只是简单地将所有性别标签转换为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')

谁能告诉我我做错了什么?谢谢。

1 个答案:

答案 0 :(得分: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')

原来我非常接近,Jayvee帮了我一点!