Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2010, 18:53   #1
NIKOLASCS
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 17
По умолчанию Выбор первого значения

Как в данном запросе выбрать первое значение из таблицы Devices, т.к. в ином случае получаем на каждую запись из таблицы Cust несколько записей из таблицы device.
Опция Distinct не подходит.


SELECT
Cust.CustomerID,
Cust.LicNumber,
Cust.FirstName,
Cust.TownName,
Cust.StreetName,
Cust.HouseNumber,
Cust.Apartment,
Customers.Litera,
Devices.Number,
bypass_sheet.SheetDate,
bypass_sheet_item.OldMeasure,
bypass_sheet_item.Measure

FROM Gas.dbo.bypass_sheet bypass_sheet, Gas.dbo.bypass_sheet_item bypass_sheet_item, Gas.dbo.Cust Cust, Gas.dbo.Customers Customers, Gas.dbo.Devices Devices

WHERE Cust.CustomerID = Customers.CustomerID AND Customers.CustomerID = Devices.CustomerID AND bypass_sheet_item.CustomerID = Customers.CustomerID AND bypass_sheet.SheetID = bypass_sheet_item.SheetID AND ((bypass_sheet.SheetDate>={ts '2010-04-01 00:00:00'})) ORDER BY Cust.CustomerID
NIKOLASCS вне форума Ответить с цитированием
Старый 05.04.2010, 21:10   #2
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Сообщение от NIKOLASCS Посмотреть сообщение
Как в данном запросе выбрать первое значение из таблицы Devices, т.к. в ином случае получаем на каждую запись из таблицы Cust несколько записей из таблицы device.
Что значит "первое значение"? По какому критерию оно первое?

В качестве примера:
Код:
SELECT Cust.CustomerID, 
           Cust.LicNumber, 
	Cust.FirstName, 
	Cust.TownName, 
	Cust.StreetName,
	Cust.HouseNumber, 
	Cust.Apartment, 
	Customers.Litera, 
	Devices.Number, 
	bypass_sheet.SheetDate, 
	bypass_sheet_item.OldMeasure, 
	bypass_sheet_item.Measure 
   FROM bypass_sheet, 
           bypass_sheet_item, 
           Cust, 
           Customers,
           Devices
 WHERE Cust.CustomerID = Customers.CustomerID 
     AND Customers.CustomerID = Devices.CustomerID 
     AND bypass_sheet_item.CustomerID = Customers.CustomerID 
     AND bypass_sheet.SheetID = bypass_sheet_item.SheetID 
     AND bypass_sheet.SheetDate >= {ts '2010-04-01 00:00:00'}
     AND Devices.Number IN ( SELECT MIN( Devices.Number )
                                          FROM Devices 
                                         WHERE Customers.CustomerID = Devices.CustomerID )
ORDER BY Cust.CustomerID
Не факт, что это Вам поможет. Так как:
1) Использование MIN в запросе может оказаться не совсем корректным применительно к Вашей задаче;
2) Я так предполагаю, что кроме как в "Devices", так и в связанной таблице "bypass_sheet_item" на одного Customer'a тоже может быть несколько записей.
edgy вне форума Ответить с цитированием
Старый 06.04.2010, 11:36   #3
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

судя по этому
Код:
ORDER BY Cust.CustomerID
нужно это
Код:
SELECT MIN(Cust.CustomerID)
soleil@mmc вне форума Ответить с цитированием
Старый 06.04.2010, 18:14   #4
NIKOLASCS
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 17
По умолчанию

Запрос от edgy частично решает проблему, т.к. значения из Devices.Number не являются критерием. Критерием можно считать значения Cust.CustomerID, они должны быть уникальны, в моем случае нужно выбрать первое совпадающее значение. Как я понял функция MIN() выбирает минимальное значение. Выражение MIN(Cust.CustomerID) выдает ошибку.
А если использовать функцию Count() = 1? Как ее адаптировать под предложенный пример?
NIKOLASCS вне форума Ответить с цитированием
Старый 06.04.2010, 21:24   #5
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Сообщение от NIKOLASCS Посмотреть сообщение
Запрос от edgy частично решает проблему, ...
Естественно, что решает не все проблемы.
Обратите внимание на пункт 2 моего предыдущего сообщения. Я, конечно, не телепат и вполне могу ошибаться, но почему-то мне кажется, что проблема может быть в этом. Таблица "bypass_sheet_item" может содержать несколько записей с одинаковым значением CustomerID? Если да, то Вам по сути просто нужно будет немного переделать приведенный запрос с учетом этого момента.
edgy вне форума Ответить с цитированием
Старый 07.04.2010, 12:21   #6
NIKOLASCS
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 17
По умолчанию

В bypass_sheet_item действительно несколько записей с одинаковым значением CustomerID, но все эти значения функция MIN() не обрабатывает т.к. они равны друг другу.
Возможно я неправильно поставил вопрос, т.к. СУБД все равно какая последовательность строк и столбцов. Как отсеять все дублирующийся значения из Device.CustomerID?
NIKOLASCS вне форума Ответить с цитированием
Старый 07.04.2010, 13:01   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

для начала нужно правильно поставить вопрос
потому что все решения что выше привели - исключительно из собственного понимания того что ТС хочет получить
и понятие "первое значение из таблицы Devices" можно трактовать как угодно и потом разводить здесь бодягу на 100 постов ни о чем
не можете словами описать, приведите пример исходных данных по таблицам и то что нужно в итоге получить
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор максимальноко значения с массива данных sasha_prof Microsoft Office Excel 2 02.02.2010 15:29
выбор значения Screame Microsoft Office Excel 2 01.11.2009 14:09
Неразрешимая задача?? - Выбор значения из ячейки xamillion Microsoft Office Excel 9 03.12.2008 11:44
выбор значения SveSve Microsoft Office Excel 2 16.04.2008 19:13
Выбор значения из массива по столбцу и строке Almaas Помощь студентам 4 25.01.2008 14:56