Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определение дубля


Страницы:   1 2

Dvm_home ©   (2005-06-16 05:36:00) 

Здравствуйте Мастера!
Имеется таблица заявок на MS SQL:

CREATE TABLE [DeliveryDeliv] (
 [DeliveryID] int NOT NULL,
 [DateDeparture] datetime NOT NULL,
 [TimeDeparture] smallint NOT NULL,
 [NameGoods] char(60) COLLATE Cyrillic_General_CI_AS,
 [GoodsSerialNumber] char(30) COLLATE Cyrillic_General_CI_AS,
 [ShopName] char(100) COLLATE Cyrillic_General_CI_AS,
 [Customer] char(50) COLLATE Cyrillic_General_CI_AS,
 [CustomerRegion] char(50) COLLATE Cyrillic_General_CI_AS,
 [CustomerStreet] char(50) COLLATE Cyrillic_General_CI_AS NOT NULL,
 [CustomerHouse] char(10) COLLATE Cyrillic_General_CI_AS NOT NULL,
 [CustomerFlat] char(10) COLLATE Cyrillic_General_CI_AS,
 [CustomerPhone] char(20) COLLATE Cyrillic_General_CI_AS,
 [AdressComent] char(300) COLLATE Cyrillic_General_CI_AS,
 [Comment] char(400) COLLATE Cyrillic_General_CI_AS,
 [StatusID] tinyint NOT NULL,
 [TimeComent] char(20) COLLATE Cyrillic_General_CI_AS,
 [TeamID] int,
 [MotiveID] int,
 [NumberGoodsInDelivery] tinyint,
 [Created] datetime,
 [CreateUserID] int,
 [LastUpdated] datetime,
 [UpdatedUserID] int,
 [DeliveryFromStore] tinyint,
 [DateMail] datetime,
 [MailAdressID] int,
 CONSTRAINT [DeliveryDeliv_pk] PRIMARY KEY ([DeliveryID])
)
ON [PRIMARY]
GO

Необходимо узнать на какие адреса (CustomerStreet, CustomerHouse, CustomerFlat) заявки оформлялить больше одного раза.

запрос типа:
Select *, COUNT(DeliveryID) from DeliveryDeliv GROUP BY CustomerStreet, CustomerHouse, CustomerFlat
не проходит, ругается на все поля не входящие в GROUP. Пробовал использовать временную таблицу и курсор - таже история.


Dvm_home   (2005-06-16 09:37:00) [21]

Danilka ©   (16.06.05 8:34) [10]

Работает, вот только время выборки 2.78, а если так как я сделал в [4] то 0.78

Получается что если нужны другие поля то нужно делать примерно так

SELECT max(DeliveryID), MAX(DateDeparture), CustomerStreet, CustomerHouse, CustomerFlat, COUNT(DeliveryID)
FROM DeliveryDeliv
GROUP BY CustomerStreet, CustomerHouse, CustomerFlat
HAVING COUNT(DeliveryID) > 1


Всем спасибо


Danilka   (2005-06-16 08:34:00) [22]

попробуй так:

SELECT d.*
FROM DeliveryDeliv d
WHERE EXISTS (SELECT 1 FROM DeliveryDeliv d2
             WHERE d.DeliveryID != d2.DeliveryID
             AND d.CustomerStreet=d2.CustomerStreet
             AND d.CustomerHouse=d2.CustomerHouse
             AND d.CustomerFlat=d2.CustomerFlat)

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


Anatoly Podgoretsky   (2005-06-16 07:48:00) [23]

Zacho ©   (16.06.05 07:39) [8]
Ну почему случайные, можно Select 'Поле1', Count(....
Будет специальное :-)


Zacho   (2005-06-16 07:39:00) [24]

Dvm_home   (16.06.05 7:31) [7]

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


Dvm_home   (2005-06-16 07:31:00) [25]

Может подскажет кто, как выбрать поля не учавствующие в group


dmitry501   (2005-06-16 06:50:00) [26]

ЮЮ ©   (16.06.05 5:48) [3]
Извиняюсь, невнимательно прочитал вопрос. Решил, что нужно число повторных заявок... С толку сбило, что у автора COUNT


Dvm_home   (2005-06-16 06:43:00) [27]

одним запросом


Dvm_home   (2005-06-16 06:41:00) [28]

Получилось сделать вот как

Select * from DeliveryDeliv
Where CustomerStreet+CustomerHouse+CustomerFlat IN (
 Select CustomerStreet+CustomerHouse+CustomerFlat from DeliveryDeliv
 group by CustomerStreet, CustomerHouse, CustomerFlat
 HAVING count(DeliveryID) >1
)

Но, получается я немогу выбрать те поля, которые не учавствуют в GROUP BY


ЮЮ   (2005-06-16 05:48:00) [29]

>dmitry501 ©   (16.06.05 05:42) [1]

И где здесь ответ на вопрос "на какие адреса заявки оформлялить больше одного раза"?


ЮЮ   (2005-06-16 05:46:00) [30]

SELECT
 CustomerStreet, CustomerHouse, CustomerFlat,
 COUNT(DeliveryID) OneAddressCount
FROM
 DeliveryDeliv
GROUP BY
 CustomerStreet, CustomerHouse, CustomerFlat
HAVING
 COUNT(DeliveryID) > 1


dmitry501   (2005-06-16 05:42:00) [31]

Dvm_home   (16.06.05 5:36)
Select COUNT(CustomerStreet) from DeliveryDeliv GROUP BY CustomerStreet, CustomerHouse, CustomerFlat


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо