Помогите создать запрос в Access

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Помогите создать запрос в Access

Сообщение Mao » 29.10.2004 (Пт) 18:01

Есть пять таблиц: Сотрудники, Реализации, СписокРеализации, ПоступлениеCредств, СписокПоступленияСредств. Надо по конкретному сотруднику вывести сальдо. По отдельности вычислить сумму по реализации:
Код: Выделить всё
SELECT [Сотрудники].[Имя] & ", " & [Сотрудники].[Фамилия] AS Сотрудник, Sum([СписокРеализации].[Кол_во]*[СписокРеализации].[Цена]) AS СуммаРеализаций
FROM Сотрудники INNER JOIN (Реализация INNER JOIN СписокРеализации ON Реализация.КодРеализации = СписокРеализации.КодРеализации) ON Сотрудники.КодСотрудника = Реализация.КодСотрудника
WHERE (Сотрудники.КодСотрудника)=1
GROUP BY [Сотрудники].[Имя] & ", " & [Сотрудники].[Фамилия];

и сумму по поступлению средств:
Код: Выделить всё
SELECT DISTINCTROW ПоступлениеСредств.КодСотрудника, Sum(СписокПоступленияСредств.Сумма) AS СуммаСредств
FROM ПоступлениеСредств INNER JOIN СписокПоступленияСредств ON ПоступлениеСредств.КодПоступленияСредств = СписокПоступленияСредств.КодПоступленияСредств
WHERE (Сотрудники.КодСотрудника)=1
GROUP BY ПоступлениеСредств.КодСотрудника;
это не проблема, а как сделать это все в одном запросе??

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.11.2004 (Пн) 11:19

В такой формулировке задача не решаема (не решаема одним запросом). Есть у тебя в GROUP фигурирует код сотрудника, то и в SELECT должен быть только код сотрудника. Если тебе нужно выводить в "читабельном" виде, то в GROUP укажи выражение "[Сотрудники].[Имя] & ", " & [Сотрудники].[Фамилия]"
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.11.2004 (Пн) 11:22

Кстати, а база какая? Если что-то более солидное, чем Access, можно попытаться использовать вложенные запросы.
Lasciate ogni speranza, voi ch'entrate.

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 01.11.2004 (Пн) 11:25

alibek писал(а):В такой формулировке задача не решаема (не решаема одним запросом). Есть у тебя в GROUP фигурирует код сотрудника, то и в SELECT должен быть только код сотрудника. Если тебе нужно выводить в "читабельном" виде, то в GROUP укажи выражение "[Сотрудники].[Имя] & ", " & [Сотрудники].[Фамилия]"

Не вижу никакой разницы. Можно запрос построить и так:
Код: Выделить всё
SELECT [Сотрудники].[КодСотрудника] AS Сотрудник, Sum([СписокРеализации].[Кол_во]*[СписокРеализации].[Цена]) AS СуммаРеализаций
FROM Сотрудники INNER JOIN (Реализация INNER JOIN СписокРеализации ON Реализация.КодРеализации = СписокРеализации.КодРеализации) ON Сотрудники.КодСотрудника = Реализация.КодСотрудника
WHERE (Сотрудники.КодСотрудника)=1
GROUP BY [Сотрудники].[КодСотрудника];
Результат от этого не поменяется, я это делал для удобства вывода инфы. Вопрос стоит в другом, как объединить эти два запроса в один, ну там с помощью вложенных запросов или еще как то??

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 01.11.2004 (Пн) 11:26

alibek писал(а):Кстати, а база какая? Если что-то более солидное, чем Access, можно попытаться использовать вложенные запросы.

База Access2000. :D

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 01.11.2004 (Пн) 15:59

Где же вы, монстры SQLя??? :)

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 02.11.2004 (Вт) 15:54

А cross-tab query тебя не спасет? Там есть визард соответствующий в Access.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 02.11.2004 (Вт) 16:26

Какой ужас!!! :shock: Мало того, что названия длинные, так ещё и по-русски! Увидел бы такую базу, заархивировал бы и выбросил в корзину.. :spiderman:

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 02.11.2004 (Вт) 16:44

Rainbow писал(а):А cross-tab query тебя не спасет? Там есть визард соответствующий в Access.

А примерчик можно, а то в хелпах не найду я этого.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 02.11.2004 (Вт) 16:58

Scuder писал(а):Какой ужас!!! Мало того, что названия длинные, так ещё и по-русски! Увидел бы такую базу, заархивировал бы и выбросил в корзину..

Знаешь, если бы я увидела базу, которая красивое английское название как-нибудь исковеркала по-русски, я бы тоже такую базу выкинула :)

Mao писал(а):А примерчик можно, а то в хелпах не найду я этого.

Он сам посебе довольно сложный получается. Чтобф пример тебе написать - мне придется смоделировать твою ситуацию и воспользоваться визардом. Поэтому давай определимся, то ли это, что тебе нужно. Самый распространенный пример на такой запрос - это когда результатом служит таблица, в столбцах которой, допустим, месяца, в строчках люди, на пересечении - зарплата работника в этот месяц. Тебе такое нужно?

Вот держи примерчик.
http://support.microsoft.com/default.as ... -us;304458
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Mao
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 95
Зарегистрирован: 10.10.2004 (Вс) 13:09

Сообщение Mao » 02.11.2004 (Вт) 17:15

Да нет, в моем случае наверное другое. Первый запрос возвращает 1 поле с числом и второй запрос тоже самое. И мне надо, допустим, разницу между результатами этих двух запросов. и чтоб эта разница вычислялась одним запросом.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 02.11.2004 (Вт) 17:18

это тебе батенька прямая дорога в ADO с использованием провайдера MSDataShape, а инфу по этому делу искать нада в MSDN-е


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 2

    TopList