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

Откуда:
Сообщений: 27
Ребят, подскажите пожалуйста. Есть база с данными, нужно из этой базы вывести три столбца (номер_договора, ID_клиенты, ID_продажи), где есть одинаковые данные в номере договора и ID_клиента. Дело в том, что один и тот же товар, продавался клиенту, потом выкупался и снова продавался. Номер договора- поле не уникальное и может быть одинаковым для разных клиентов. Когда выполняю:

SELECT [Номер_договора]
,[ID_клиенты]
,[ID_продажи]
FROM dm.Продажи
WHERE [ID_клиенты] in
(SELECT [ID_клиенты] FROM dm.Продажи GROUP BY [ID_клиенты] HAVING count([ID_клиенты])>1)
and [Номер_договора] in
(SELECT [Номер_договора] FROM dm.Продажи GROUP BY [Номер_договора] HAVING count([[Номер_договора] )>1)
order by [Номер_договора]

то выводит результат не совсем правильный.
доступа к базе дома нет, поэтому прикрепляю картинку сделанную в excel.

К сообщению приложен файл. Размер - 15Kb
2 ноя 15, 18:24    [18360837]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в SQL  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
slonyra,

select 
	* 
from 
	dm.Продажи p 
where 
	(select 
		count(*) 
	from 
		dm.Продажи 
	where  
		[Номер_договора] = p.[Номер_договора] and
		[ID_клиенты] = p.[ID_клиенты]) > 1
2 ноя 15, 18:46    [18360969]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в SQL  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
slonyra,

ну либо так, если версия сервера позволяет
select 
	* 
from
	(select 
		*, count(*) over(partition by [Номер_договора], [ID_клиенты]) cnt
	from 
		dm.Продажи) a
where 
	cnt > 1
2 ноя 15, 18:50    [18360998]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в SQL  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
slonyra,
SELECT p.[Номер_договора]
,p.[ID_клиента]
,p.[ID_продажи]
FROM dm.Продажи as p
inner join (select p.[Номер_договора]
                    ,p.[ID_клиента]
                FROM dm.Продажи as p
               group by p.[Номер_договора]
                    ,p.[ID_клиента]
               having count(distinct p.[ID_продажи]) > 0
              ) as p1
          on p.[Номер_договора] = p1.[Номер_договора]
          and p.[ID_клиента] = p1.[ID_клиента]
2 ноя 15, 18:52    [18361004]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в SQL  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Minamoto, count(distinct p.[ID_продажи]) > 1, конечно.
2 ноя 15, 18:53    [18361013]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить