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

Откуда:
Сообщений: 233
есть таблица
IDNomDOP_NOM
481
001
111
161
262
871

Нужно вытащить только те Nom для которых существует только одно заначение из DOP_NOM, т.е. должно остаться только 8,0,1,7. А значение 6 дублируется т.к. у него два доп номера и его соответственно не надо. Не соображу как сделать.
PK - столбцы ID и NOM.
7 авг 09, 09:40    [7509135]     Ответить | Цитировать Сообщить модератору
 Re: С простым запросом помогите  [new]
так можна
Guest
SELECT Nom
FROM ...
GROUP BY Nom
HAVING COUNT(DOP_NOM)=1
7 авг 09, 09:43    [7509143]     Ответить | Цитировать Сообщить модератору
 Re: С простым запросом помогите  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
CREATE TABLE [dbo].[test] (
  [id] int NULL,
  [nom] int NULL,
  [dop_nom] int NULL
)
ON [PRIMARY]
GO

insert into test 
select 4,8,1
union
select 0,0,1
union
select 1,1,1
union
select 1,6,1
union
select 2,6,2
union
select 8,7,1

select nom, count(dop_nom)
from test
group by nom
having count(dop_nom) = 1
7 авг 09, 09:47    [7509156]     Ответить | Цитировать Сообщить модератору
 Re: С простым запросом помогите  [new]
Niror
Member

Откуда:
Сообщений: 233
Спасибо так можна, можно и так.
7 авг 09, 09:48    [7509161]     Ответить | Цитировать Сообщить модератору
 Re: С простым запросом помогите  [new]
Niror
Member

Откуда:
Сообщений: 233
Ramin Спасибо
7 авг 09, 09:49    [7509168]     Ответить | Цитировать Сообщить модератору
 Re: С простым запросом помогите  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
на случай, если выдать нужно все три поля
select t1.id, t1.nom, t1.dop_nom
  from test t1
 where not exists (select * from test t2 where t2.nom = t1.nom and t2.dop_nom <> t1.dop_nom)

select t1.id, t1.nom, t1.dop_nom
  from test t1
  left join test t2 on t2.nom = t1.nom and t2.dop_nom <> t1.dop_nom
 where t2.id is null

;with cte as (
   select id, nom, dop_nom, count(dop_nom) over(partition by nom) cnt
     from test
)
select id, nom, dop_nom
  from cte
 where cnt = 1

id          nom         dop_nom
----------- ----------- -----------
0           0           1
1           1           1
4           8           1
8           7           1

(4 row(s) affected)
7 авг 09, 10:19    [7509305]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить