Помощь, необходимая в AdventureWorks в запросе SQL - PullRequest
1 голос
/ 23 декабря 2009

Я просто играл с базой данных adventureworks в sqlserver. Я застрял в запросе. Я хотел выбрать все заголовки из HumanResources.Employee, которые являются «Мужскими» или «Женскими», но не обоими. Т.е., если звание «Бухгалтер» - «Мужчина» и «Женщина», я хочу оставить это звание. Мне нужны только те названия, где пол - мужской или женский.

Я делал это до сих пор.

выберите отличное (название) от humanresources.employee, где пол = 'M'
выберите отличное (название) от humanresources.employee, где пол = 'F'

Вероятно, соединение между этими двумя запросами будет работать. Но если у вас есть другое решение, пожалуйста, дайте мне знать.

Это не домашняя работа. :)

Заранее спасибо.

Ответы [ 6 ]

2 голосов
/ 23 декабря 2009

Использование:

SELECT t.title
  FROM HUMANRESOURCES.EMPLOYEE t
 WHERE t.gender = 'M'
   AND NOT EXISTS(SELECT NULL
                    FROM HUMANRESOURCES.EMPLOYEE e
                   WHERE e.gender = 'F'
                     AND e.title = t.title)
UNION ALL
SELECT t.title
  FROM HUMANRESOURCES.EMPLOYEE t
 WHERE t.gender = 'F'
   AND NOT EXISTS(SELECT NULL
                    FROM HUMANRESOURCES.EMPLOYEE e
                   WHERE e.gender = 'M'
                     AND e.title = t.title)
1 голос
/ 23 декабря 2009

Вот исправленная версия

select title from HumanResources.Employee as t
where gender='M' And Not Exists(select null from HumanResources.Employee as e
                        where gender='F' And e.title =t.title)
Union 

select title from HumanResources.Employee as t1
where gender='F' And Not Exists(select null from HumanResources.Employee as e1
                        where gender='M' And e1.title =t1.title)
order by title
0 голосов
/ 04 января 2014

Ради разнообразия мне нравится этот (только для эстетики)

with WomensJobs as
(
    select distinct(Title) title from HumanResources.Employee where Gender='F' 
),
MensJobs as
(
    select distinct(Title) title from HumanResources.Employee where Gender='M'
),
WomenOnlyJobs as
(
    SELECT title from WomensJobs EXCEPT SELECT title from MensJobs
),
MenOnlyJobs as
(
    SELECT title from MensJobs EXCEPT SELECT title from WomensJobs
)
select 'M', title from MenOnlyJobs
UNION 
select 'F', title from WomenOnlyJobs
0 голосов
/ 28 апреля 2010
select title
from (
    select distinct title, gender
    from HumanResources.Employee) as temptable
group by title
having count(title) = 1
0 голосов
/ 23 декабря 2009
SELECT DISTINCT(title)
  FROM HumanResources.Employee
 WHERE t.gender = 'M'
EXCEPT
SELECT DISTINCT(t.title)
  FROM HumanResources.Employee
 WHERE t.gender = 'F'

UNION

SELECT DISTINCT(title)
  FROM HumanResources.Employee
 WHERE t.gender = 'F'
EXCEPT
SELECT DISTINCT(t.title)
  FROM HumanResources.Employee
 WHERE t.gender = 'M'
0 голосов
/ 23 декабря 2009

Попробуйте это

select distinct title FROM humanResources.employee 
WHERE gender = 'M'  and 
  jobtitle not in (select title FROM humanResources.employee  WHERE gender='F') 
union
select distinct title FROM humanResources.employee 
WHERE gender = 'F'  and 
  jobtitle not in (select title FROM humanResources.employee  WHERE gender='M') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...