![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение дубля
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