Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос с группировкой суммирующий два столбца с разными условиями / 15 сообщений из 15, страница 1 из 1
02.12.2003, 18:27
    #32341196
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
Прошу подсказать как можно составить один запрос, который у меня на данный момент разделен на 2 (даже на 3, третий их потом джойнит в один)

Исходная таблица:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
[bal]  [prizn]   [kod]    [val]  [saldoVal]  
   1       True      300       RUR      - 10 
   1       True      301       USD     -  5 
   1       True      302       RUR       15 
   2       False     303       RUR       11 
   2       False     304       USD       7 
   2       False     305       RUR       16 
   3       True      303       RUR      - 14 
   3       True      304       USD       2 
   3       True      305       RUR      - 19 


Необходимо сгруппировать по балан. позиции ([bal]), а столбец [saldoVal] просуммировать по этим сгруппиров. позициям. Но вот проблема, получить надо два просуммированных столбца:
1. в первый (saldoValNorm) отобрать счета: ([prizn]=True AND [saldoVal]<0) OR ([prizn]=False AND [saldoVal]>0)
2. а второй (saldoValRed) соотв.:([prizn]=True AND [saldoVal]>0) OR ([prizn]=False AND [saldoVal]<0)

т.е. получить в итоге так:

Код: plaintext
1.
2.
3.
4.
[bal]   [saldoValNorm]  [saldoValRed]
   1         - 15                         15 
   2           34                          0 
   3         - 33                          2 


Пока у меня эти столбцы считаются по отдельности:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT bal, Sum([saldoVal]) AS saldoValNorm 
FROM Таблица1
WHERE ([prizn]=True AND [saldoVal]< 0 ) OR ([prizn]=False AND [saldoVal]> 0 )
GROUP BY bal

и

SELECT bal, Sum([saldoVal]) AS saldoValRed 
FROM Таблица1
WHERE ([prizn]=True  AND [saldoVal]> 0 ) OR ([prizn]=False  AND [saldoVal]< 0 )
GROUP BY bal

ну и  3  запрос соединяет их потом через LEFT+RIGHT JOIN



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

У меня пока в голове токо такие неподходящие варианты:
1. Сначала отдельный запрос с группировкой по [bal] , потом второй запрос на основе этого уже легко суммирует какие хошь поля - однако это уже 2 запроса, а не один... :(
2. написать типа: Sum(Fun1([saldoVal];[prizn])) AS saldoValNorm, Sum(Fun2([saldoVal];[prizn])) AS saldoValRed - где Fun1,2 это VB функции которые внутри себя проверяют условия на признак и отриц. числа и для не своих значений возвращают просто НУЛЬ - запрос один, это круто, но использование своих VB функции сильно подтормаживает выполнение запроса...:(
...
Рейтинг: 0 / 0
02.12.2003, 18:30
    #32341201
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
iif?
...
Рейтинг: 0 / 0
02.12.2003, 18:35
    #32341205
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
Хмм, по второму варианту вместе с IIf (да, про нее я совсем забыл), ну чтож, завтра протестим, посмотрим что будет быстрее 3 старых запроса или 1 новый...
...
Рейтинг: 0 / 0
02.12.2003, 21:17
    #32341322
стас1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
iif - какой у него примерно синтаксис?
где смотреть на него help?
...
Рейтинг: 0 / 0
02.12.2003, 21:18
    #32341323
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
В Аксессе нажимаешь alt+f11
И в окне ВБА, куда ты попадешь, нажав вышеуказанную комбинацию клавиш, нажимаешь F1
...
Рейтинг: 0 / 0
02.12.2003, 21:20
    #32341325
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
IIF
Returns one of two parts, depending on the evaluation of an expression.

Syntax: IIf(expr, truepart, falsepart)

Remarks
IIf always evaluates both truepart and falsepart, even though it returns only one of them. Because of this, you should watch for undesirable side effects. For example, if evaluating falsepart results in a division by zero error, an error occurs even if expr is True.
...
Рейтинг: 0 / 0
02.12.2003, 21:41
    #32341333
стас1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
а если теперь надо получить 7 просуммированных столбцов,
для каждого дня недели - свой?
...
Рейтинг: 0 / 0
03.12.2003, 15:58
    #32342255
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
Экспериментируя с IIF столкнулся с таким глюком:

вот так работает:
Код: plaintext
1.
 SELECT Таблица1, IIF([saldoVal]< 1  OR [saldoVal> 3 , [saldorur], 0 ) AS Saldorur1


а вот так не хочет:
Код: plaintext
1.
 SELECT Таблица1, IIF(([saldoVal]< 1 ) OR ([saldoVal> 3 ), [saldorur], 0 ) AS Saldorur1


т.е. добавленные скобки в условие () OR () приводят к ошибке синтаксиса SQL запроса (Syntax error (missing operator) in query expression)

мне то вообще надо такое выражение забабахать:
Код: plaintext
1.
([prizn]=True  AND [saldoVal]> 0 ) OR ([prizn]=False  AND [saldoVal]< 0 )

так что пришлось забахать через двойной IIF:
Код: plaintext
1.
IIF( [activeacc]=True AND [saldoVal]< 0 , [saldoVal], IIF(  [activeacc]=False AND [saldoVal]> 0 ,[saldoVal], 0  )  )


...............интересно, в чем прикол. Это токо у меня так работает (AccXp, mdb) или у всех???

В справке, MSDN и по поиску на SQL.ru не нашел описания ограничений на ввод сложных выражений со скобками или все таки это где-то прописано...
...
Рейтинг: 0 / 0
03.12.2003, 16:36
    #32342311
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
Код: plaintext
SELECT Таблица1, IIF((([saldoVal]< 1 ) OR ([saldoVal> 3 )), [saldorur], 0 ) AS Saldorur1

А так?
...
Рейтинг: 0 / 0
03.12.2003, 17:06
    #32342354
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
а так пошел, шайтан просто :)
...
Рейтинг: 0 / 0
03.12.2003, 17:31
    #32342392
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
Никакого шайтана. Бубен, просто бубен
...
Рейтинг: 0 / 0
03.12.2003, 17:41
    #32342409
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
А почему при saldoVal>3 левая квадратная скобка есть, а правой нет?
...
Рейтинг: 0 / 0
03.12.2003, 17:43
    #32342414
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
Ctrl+C & Ctrl+V - это у меня
А почему у автора - ХЗ. Очепятка?
...
Рейтинг: 0 / 0
03.12.2003, 17:54
    #32342432
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
Да это очепятка, в исходниках все путем, просто выкидывал для примера все лишнее...

Кстати, Вас не напрягает конструктор запросов в режиме SQL, какие-то мелковатые буквы, курсор мигает так, что зачастую непонятно где же он точно стоит, похожие прблемы с редактированием текстом у меня были когда я работал на компьютере где системный шрифт был выбран наклонным (есть у нас на работе такие любители) и вот, мигает курсор посередине буквы и хрен поймешь что он щас сотрет через делейт....
еще подсветки разными цветами там не хватает, ..... а никуда не денешься, набирать все равно в нем приходится
...
Рейтинг: 0 / 0
03.12.2003, 18:12
    #32342468
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой суммирующий два столбца с разными условиями
По-моему, есть все-таки что-то, что подсвечивает синтаксис SQL
Пиши там, копируй в конструктор...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос с группировкой суммирующий два столбца с разными условиями / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]