2016-10-04 4 views
1

Я кодировал эту последнюю проблему весь день, и файл должен быть представлен завтра для моего класса базы данных SQL Server.У вас возникли проблемы с общим выражением таблицы в SQL Server Adventureworks

Я должен создать 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') 

Может ли кто-нибудь сказать мне, что я сделал не так? Спасибо.

+0

необходимо добавить BusinessEntityID в cte_name2, тогда основной запрос является внутренним соединением между cte_name1 и cte_name2 на BusinessEntityId – 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') 

Оказывается, я был очень близок и Jayvee помогли мне совсем немного!