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

Откуда:
Сообщений: 12
Проблема с дублированием. При выполнении запроса происходит дублирование данных а точнее: количество договоров и покупателей, этим задевает суммарную стоимость и вес товаров.


SELECT DISTINCT     YEAR (Договоры.Дата) AS Год,
                            COUNT (Покупки.[Номер договора]) AS Колво_Договоров,
                                                    SUM (Покупки.[Вес ЕДИЗМ(Кг)]) AS Вес,
                                                     SUM (Покупки.Цена * Покупки.Количество) AS [Суммарная стоимость],
                                                        COUNT (Продавцы.[Продавец]) AS Количествоо_Продавцов
FROM                Покупатели INNER JOIN
                                Договоры ON Покупатели.[Код покупателя] = Договоры.[Код покупателя] INNER JOIN
                                Продавцы ON Договоры.[Код продавца] = Продавцы.[Код продавца] CROSS JOIN 
                                Покупки
WHERE (Покупатели.Город = N'Ангарск')
GROUP BY    YEAR (Договоры.Дата), Продавцы.Продавец
5 июн 13, 06:43    [14392092]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Shift404,

Из-за cross join у вас каждая покупка будет умножена на число договоров. Если думаете, что DISTINCT убирает ваши "повторы", то это не так. Вам нужно заменить CROSS JOIN на INNER JOIN
5 июн 13, 07:42    [14392136]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
И тогда количество договоров и покупателей восстановиться?
5 июн 13, 08:07    [14392167]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
Какие вообще действия выполняет cross join и какие inner join
5 июн 13, 08:09    [14392175]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Shift404,

http://msdn.microsoft.com/ru-ru/library/ms191517(v=sql.105).aspx
http://msdn.microsoft.com/ru-ru/library/ms190690(v=sql.105).aspx
5 июн 13, 08:18    [14392202]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
А зачем называть объекты БД по-русски? Чтобы коды в полтора раза дольше писать ?

Простите за оффтопик.
5 июн 13, 11:13    [14393074]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
Cammomile,

Какую дали БД по такой и делаем.
5 июн 13, 15:58    [14395454]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
Ruuu,

Огромное спасибо. Сейчас сервера нету рядом, завтра с утра проверю отпишусь
5 июн 13, 16:02    [14395489]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
4234 23 fds
Guest
Shift404, у дублированных данных одинаковая дата? пришлите пример
5 июн 13, 16:03    [14395497]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
4234 23 fds,

Пример прислать не могу, сервера нету рядом.
Считает количество договоров по несколько раз. Например за год всего 150 договоров, а выдает около 3000-5000, тоже самое и с продавцами
5 июн 13, 21:50    [14397086]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
Ruuu,

Привет, пришел проверил и выдает ошибку:
incorrect syntax near the keyword 'where'
6 июн 13, 06:02    [14397631]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
Вот просили пример
6 июн 13, 06:07    [14397632]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
Не прикрепляется скрин
6 июн 13, 06:21    [14397638]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Shift404
Ruuu,

Привет, пришел проверил и выдает ошибку:
incorrect syntax near the keyword 'where'
Блин, что вы хотите? Чтобы кто-нибудь угадал, какую вы там запятую поставили перед WHERE?

Если хотите, чтобы Вам помогли, и потратили на это своё время, то тоже потрудитесь подробно описать на нормальном русском языке, чего вы хотите добиться; привести полный текст ошибки; текст запроса, который эту ошибку вызывает; скрипты тестовых данных; желаемый результат, и версию сервера (SELECT @@VERSION). Все это в удобном для восприятия виде.

Всё это написано в правилах форума. Вы пока не сделали ничего из этого.
6 июн 13, 06:56    [14397661]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
Ruuu,

Я сделал все как ты сказал, только вместо cross join написал inner join. И мне выдало ошибку
6 июн 13, 07:40    [14397705]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
Ruuu
Shift404,

Из-за cross join у вас каждая покупка будет умножена на число договоров. Если думаете, что DISTINCT убирает ваши "повторы", то это не так. Вам нужно заменить CROSS JOIN на INNER JOIN


Ни каких запятых и более не добавлял.
Ниже прикрепляю само задание.

К сообщению приложен файл. Размер - 125Kb
6 июн 13, 08:10    [14397740]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Shift404
Ruuu,

Я сделал все как ты сказал, только вместо cross join написал inner join. И мне выдало ошибку
Ну, так нужно было еще и ON с условиями соединения написать.

ЗЫ: если это курсовая, то нужно спрашивать у руководителя, это его обязанность вам помогать, а ваша рыться в конспектах и учебниках.
ЗЫЫ: простите за любопытность, а вы из какого ВУЗа? ИрГТУ, ИрГУПС или вообще не из Иркутска?
6 июн 13, 08:23    [14397757]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Shift404
Member

Откуда:
Сообщений: 12
Ruuu,

Нархоз. Это просто задание что бы сдать экзамен. Помогите напишите запрос который будет работать.
6 июн 13, 09:09    [14397871]     Ответить | Цитировать Сообщить модератору
 Re: Дублирование  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Shift404
Ruuu,

Нархоз. Это просто задание что бы сдать экзамен. Помогите напишите запрос который будет работать.
А потом вас возьмут в мой отдел, и я буду годами писать запросы за вас?

К тому же, вы так и не сделали, то о чем я вас просил здесь 14397661 . В вашем скане задания, которое вы обломались набрать, нет описания БД, оно должно быть у вас на отдельном листочке.
6 июн 13, 09:58    [14398101]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить