Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Объединение результатов двух запросов как пересечение множеств  [new]
euthanatos
Member

Откуда:
Сообщений: 33
Здравствуйте. Только изучаю T-SQL, столкнулся с такой проблемой:
есть таблица, где среди всего прочего есть поля AccountSys и Cl_Acc_Typ, причем они сами по себе не коим образом не уникальны и значения в них могут повторяться. Мне нужно извлечь из этой таблицы перечень всех встречающихся AccountSys (без повторения одинаковых AccountSys), для которых значения Cl_Acc_Typ = '4' и '6' (чтоб присутствовали оба).
Родилось два запроса, которые сами по себе меня устраивают:

	SELECT A.AccountSys
	FROM [BASE_X].[dbo].[X_Accounts] A
	WHERE A.Cl_Acc_Typ = '4' 
	GROUP BY A.AccountSys

	SELECT C.AccountSys
	FROM [BASE_X].[dbo].[X_Accounts] C
	WHERE C.Cl_Acc_Typ = '6' 
	GROUP BY C.AccountSys


Вопрос: как из них сделать запрос который будет выдавать лишь те AccountSys, которые присутствуют в результатах только обоих запросов? Или другая формулировка: как правильно пристроить сюда какой-нибудь JOIN?
21 ноя 12, 10:00    [13505002]     Ответить | Цитировать Сообщить модератору
 Re: Объединение результатов двух запросов как пересечение множеств  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
SELECT A.AccountSys
FROM [BASE_X].[dbo].[X_Accounts] A
WHERE A.Cl_Acc_Typ IN('4','6')
GROUP BY A.AccountSys
HAVING COUNT(DISTINCT A.Cl_Acc_Typ)=2;
21 ноя 12, 10:05    [13505041]     Ответить | Цитировать Сообщить модератору
 Re: Объединение результатов двух запросов как пересечение множеств  [new]
aleks2
Guest
select ...
intersect
select ...
21 ноя 12, 10:06    [13505046]     Ответить | Цитировать Сообщить модератору
 Re: Объединение результатов двух запросов как пересечение множеств  [new]
Гость333
Member

Откуда:
Сообщений: 3683
euthanatos
как правильно пристроить сюда какой-нибудь JOIN?

Можно и через JOIN:
SELECT t1.AccountSys
FROM
(	SELECT A.AccountSys
	FROM [BASE_X].[dbo].[X_Accounts] A
	WHERE A.Cl_Acc_Typ = '4' 
	GROUP BY A.AccountSys
) t1
INNER JOIN
(
	SELECT C.AccountSys
	FROM [BASE_X].[dbo].[X_Accounts] C
	WHERE C.Cl_Acc_Typ = '6' 
	GROUP BY C.AccountSys
) t2 ON t2.AccountSys = t1.AccountSys
21 ноя 12, 10:13    [13505086]     Ответить | Цитировать Сообщить модератору
 Re: Объединение результатов двух запросов как пересечение множеств  [new]
euthanatos
Member

Откуда:
Сообщений: 33
Спасибо, все три варианта вполне работают )
21 ноя 12, 12:21    [13506202]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить