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

Откуда:
Сообщений: 207
Здравствуйте, имеется такая таблица tab:

Firma Vid Region
A OOO 77
A OOO 78
A OAO 26
B ЗАО 55
B OAO 33
C ЗАО 05
D OOО 01


Нужно написать запрос ,
Вывести столбцы Firma, Vid где у есть фирмы только с одним видом юридической организации:
Т.е. результат будет таким:
C ЗАО 05
D OOО 01

Никак не могу понять как его сделать, чтобы он работал корректно, смог только сделать запрос, который считает количество в столбце Вид для каждой Фирмы,
SELECT Firma, count (Vid)
FROM tab
GROUP BY Firma
Подскажите, пожалуйста, как докрутить запрос для получения нужного результата?
Спасибо.
7 июн 17, 15:27    [20547315]     Ответить | Цитировать Сообщить модератору
 Re: запрос по выводу данных  [new]
Rankatan
Member

Откуда:
Сообщений: 250
SELECT Firma, MAX(Vid), MAX(Region)
FROM tab
GROUP BY Firma
having count(*)=1
7 июн 17, 15:29    [20547323]     Ответить | Цитировать Сообщить модератору
 Re: запрос по выводу данных  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Rankatan
SELECT Firma, MAX(Vid), MAX(Region)
FROM tab
GROUP BY Firma
having count(*)=1
Не об этом же спрашивают.
SELECT Firma, Vid=MIN(Vid)
FROM tab
GROUP BY Firma
HAVING COUNT(DISTINCT Vid)=1;
7 июн 17, 15:37    [20547351]     Ответить | Цитировать Сообщить модератору
 Re: запрос по выводу данных  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
martinezo
Т.е. результат будет таким
И что же должно быть в поле Region, если он не один?
Может, так?
SELECT * FROM tab t WHERE NOT EXISTS(SELECT * FROM tab tt WHERE tt.Firma=t.Firma AND tt.Vid<>t.Vid);
7 июн 17, 15:46    [20547390]     Ответить | Цитировать Сообщить модератору
 Re: запрос по выводу данных  [new]
martinezo
Member

Откуда:
Сообщений: 207
iap
Rankatan
SELECT Firma, MAX(Vid), MAX(Region)
FROM tab
GROUP BY Firma
having count(*)=1
Не об этом же спрашивают.
SELECT Firma, Vid=MIN(Vid)
FROM tab
GROUP BY Firma
HAVING COUNT(DISTINCT Vid)=1;


не очень понятно, зачем тут min и max тк надо найти фирмы и их вид, у которых количество Видов =1
7 июн 17, 17:35    [20547951]     Ответить | Цитировать Сообщить модератору
 Re: запрос по выводу данных  [new]
martinezo
Member

Откуда:
Сообщений: 207
iap
martinezo
Т.е. результат будет таким
И что же должно быть в поле Region, если он не один?
Может, так?
SELECT * FROM tab t WHERE NOT EXISTS(SELECT * FROM tab tt WHERE tt.Firma=t.Firma AND tt.Vid<>t.Vid);

регион не надо выводить - надо выводить только Firma, Vid причем те фирмы где им соответствует количество полей Vid =1
7 июн 17, 17:44    [20547985]     Ответить | Цитировать Сообщить модератору
 Re: запрос по выводу данных  [new]
martinezo
Member

Откуда:
Сообщений: 207
ответьте, пожалуйста, на мой комментарий
8 июн 17, 07:22    [20548742]     Ответить | Цитировать Сообщить модератору
 Re: запрос по выводу данных  [new]
мегамозг
Member

Откуда: Екатеринбург
Сообщений: 71
martinezo,
with c as
(
select *
, count(*) over (partition by firma) qty 
from tab
)
select c.*
from c
where qty = 1

Это то же, что написал Rankatan, только без пугающих тебя min и max.
8 июн 17, 07:32    [20548749]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить