Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Простой вопрос по построениею запроса

5.5K
14 декабря 2003 года
mYxuS
7 / / 13.12.2003
Вопрос. Запросы делаю в конструкторе, поэтому имейте снисхождение 8-)
Помощь нужна катастрофически. Не проходите мимо 8-)

таблица1:
COL1 COL2 COL3
ааа _ 100 _ 01.01.2003
ааа _ 150 _ 10.01.2003
ббб _ 200 _ 01.02.2003
ббб _ 300 _ 20.03.2003

Что нужно:
Для каждого уникального значения столбца COL1 подсчитать сумму значений COL2 для всех записей где значение COL3 меньше чем у обрабатываемой записи.

Похожая задача недавно гдето проходила но я ещё раз обращаю внимание на то что с VB я не знаком и функции писать и подключать неспособен. Поэтому искомая операция должна легко влазить в столбец "поле" конструктора запросов.
459
15 декабря 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by mYxuS
Вопрос. Запросы делаю в конструкторе, поэтому имейте снисхождение 8-)
Помощь нужна катастрофически. Не проходите мимо 8-)

таблица1:
COL1 COL2 COL3
ааа _ 100 _ 01.01.2003
ааа _ 150 _ 10.01.2003
ббб _ 200 _ 01.02.2003
ббб _ 300 _ 20.03.2003

Что нужно:
Для каждого уникального значения столбца COL1 подсчитать сумму значений COL2 для всех записей где значение COL3 меньше чем у обрабатываемой записи.



Не очень понятно какое значениебыть Col3 у обрабатываемой записи, которая должна быть, как я понимаю, уникальной.
В принципе я предполагаю два шага решения
1 - создание набора с уникальным Col1
2 - суммирование по группам по условию, что дата меньше чем в созданном наборе.
Тебе подойдет SQL или надо описание работы в конструкторе?

459
15 декабря 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by mYxuS
Вопрос. Запросы делаю в конструкторе, поэтому имейте снисхождение 8-)
Помощь нужна катастрофически. Не проходите мимо 8-)

таблица1:
COL1 COL2 COL3
ааа _ 100 _ 01.01.2003
ааа _ 150 _ 10.01.2003
ббб _ 200 _ 01.02.2003
ббб _ 300 _ 20.03.2003

Что нужно:
Для каждого уникального значения столбца COL1 подсчитать сумму значений COL2 для всех записей где значение COL3 меньше чем у обрабатываемой записи.



Не очень понятно какое брать значение Col3 у обрабатываемой записи, которая должна быть, как я понимаю, уникальной.
В принципе я предполагаю два шага решения
1 - создание набора с уникальным Col1
2 - суммирование по группам по условию, что дата меньше чем в созданном наборе.
Тебе подойдет SQL или надо описание работы в конструкторе?

5.5K
15 декабря 2003 года
mYxuS
7 / / 13.12.2003
Вот сам собой напрашивающийся код решения:
 
Код:
select col1, sum(col2)
 from table
 where col3 < some_date
 group by col1


но поскольку мне нужно найти все строки, где tab1.col3 меньше чем его значение в обрабатываемой строке, date должен быть равен текущему значению столбца col3 т.е.
select sum(col2) from tab1 where tab.1col3<tab1.col3 что есть абсурд. можно ли записать текущее значение столбца col3 во временную переменную? или как быть?

что значит обрабатываемая строка?
Вот пример необходимого мне подзапроса на си-подоюном языке.

GetSum(int var1,int var 2)
{
sum=0;
tab1.Begin();
while(tab1.col1!=NULL)
{
if(tab1.col1==var1)
if(tab1.col3<=var2)
sum+=tab1.col2;
tab1.Next();
}
return sum;
}

И вот эта функция должна бы стоять в поле "Поле" конструктора запросов для интересующего столбца.
5.5K
16 декабря 2003 года
mYxuS
7 / / 13.12.2003
Мне тут подсказали решение:

SELECT COL1, COL2, COL3, DSum("COL2","tbl","clng([COL3]) <= " & CLng([COL3]) & " AND [COL1] = '" & [COL1] & "'") AS [SUM] FROM tbl

Решение работает. Но я забыл указать ещё одно ограничение:
надо чтобы даты всех просматриваемых накладных были не просто меньше чем у выбранной накладной, но и попадали в тотже месяц и тотже год. Для этого использую функцию DateAdd() один из параметров которой - строковый (например DateAdd("m";1;MyDate) ). Но поскольку мы используем функцию DSum() необходимое выражение уже стоит в кавычках. Таким образом нужен просто совет по синтаксису - как использовать кавычки в кавычках?
Вот мой запрос. Он не проходи синтаксическую проверку. Почему.

N_quant: [dogovor].[quantity]-DSum("quantity";"naklpol";"CLng([naklpol].[date]) <= " & CLng([naklpol].[date]) & "AND [naklpol].[dog_num] = " & [naklpol].[dog_num] & "AND Month(DateAdd('m';1;[naklpol].[date])) = " & Month(DateAdd('m';1;[naklpol].[date])) & "AND Year(DateAdd('m';1;[naklpol].[date])) = " & Year(DateAdd('m';1;[naklpol].[date])) & "")
5.5K
16 декабря 2003 года
mYxuS
7 / / 13.12.2003
Удалось обойтись без DateAdd(). Хотя жаль что проблема с кавычками так и не решилась. Но появилась проблема посмешнее. При попытке сохранить запрос аксес падает.

N_quant: [dogovor].[quantity]-DSum("quantity";"naklpol";"CLng([naklpol].[date]) <= " & CLng([naklpol].[date]) & "AND [naklpol].[dog_num] = " & [naklpol].[dog_num] & "AND Month([naklpol].[date]) = " & Month([naklpol].[date]) & "AND Year([naklpol].[date]) = " & Year([naklpol].[date]) & "")+[naklpol].[quantity]

Может можно чтото изменить в натсройках аксеса? Или как? Я уже слышал о такой проблеме но не слышал чтобы ктото её решил..


Дополнительно: как реализовать на SQL такую операцию ?
if(tab1.col1==NULL) tab1.col1=10; else tab1.col1=20;
459
16 декабря 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by mYxuS
Таким образом нужен просто совет по синтаксису - как использовать кавычки в кавычках?




В VBA для SQL-запроса я использую апостроф как кавычку, например
"WHERE (p_pl>9 and brak<>'*' and A>0)"
наверное и тебе подойдет?

258
16 декабря 2003 года
SergeySV
1.5K / / 19.03.2003
По поводу падения Access:
1. Access может падать когда пытается выполнить хитрожопо-составленный запрос, который проходит проверку на синтаксис, но нормально выполниться не может в силу логических ошибок в конструкции запроса
2. Нормально составленный запрос, но из-за своей сложности (ну например запрос на объединение и т.д.) просто не может быть отображен в конструкторе запросов. К сожалению этот вид не блокируется и необходимо следить чтобы случайно из SQL режима не переключиться в режим конструктора.

Возникающие в этих двух случаях падение Access не лечится ни какими настройками, считайте это его особенностью...
5.5K
16 декабря 2003 года
mYxuS
7 / / 13.12.2003
По поводу падения: В запросе есть условия - на месяц и на год. Если одно из них выкинуть - аксес падать перестает. А выполняется запрос в любом случаем - падает он только при сохранении. Причем неважно в каком mode - в конструкторе или в SQL. Вот фигня да?

По поводу кавычек. Одинарные кавычки я всовывал с самого начала, но хоть бы хны. В середине дня попробую составить элементарный пример с DSum("..","..","..DateAdd()..") и выложить его на скачивание.
258
16 декабря 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by mYxuS
[B
Дополнительно: как реализовать на SQL такую операцию ?
if(tab1.col1==NULL) tab1.col1=10; else tab1.col1=20;



Например:
SELECT tab1.col2, tab1.col3, IIf(tab1.col1 Is Null, 10, 20) AS Tab1Col1

т.е. вместо столбца tab1.col1 ты выводишь вычисляемый столбец (в конструкторе запросов они их называют - Выражение), ну а AS даешь ему какое-нибудь уникальное название

5.5K
17 декабря 2003 года
mYxuS
7 / / 13.12.2003
Всем, друзья, спасибо! У меня пока всё работает 8-))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог