Модераторы: Akella

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> group by 
:(
    Опции темы
Olesya
Дата 15.1.2010, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



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

Код

select a.pole1 / a.pole2, sum(a.pole3)
from a
group by a.pole1 / a.pole2


так конечно же не работает, это общий смысл. а как написать, чтоб работало? помогите, пожалуйста
PM MAIL   Вверх
Akella
Дата 15.1.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



По номеру поля

Код

select a.pole1 / a.pole2, sum(a.pole3)
from a
group by 1


Это сообщение отредактировал(а) Akella - 15.1.2010, 11:50
PM MAIL   Вверх
Gluttton
Дата 15.1.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 7
Всего: 54



Ну как-нибуть так, например:
Код

select
    s.p1p2,
    sum(s.pole3) as p3
from
(
    select 
        a.pole1 / a.pole2 as p1p2,
        a.pole3
    from a
)   as s
    group by s.p1p2


Добавлено через 1 минуту и 46 секунд
У меня как всегда сложнее всех  smile ...


--------------------
Слава Україні!
PM MAIL   Вверх
Akella
Дата 15.1.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Вот этот запрос прекрасно работает
Код

select a.id/a.id_type, SUM(A.id_region) from apart a
group by a.id/a.id_type


Добавлено через 48 секунд
Olesya, и вообще, текст ошибки не мешало бы на форумах приводить smile 
PM MAIL   Вверх
Gluttton
Дата 15.1.2010, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 7
Всего: 54



Цитата(Akella @  15.1.2010,  11:52 Найти цитируемый пост)
Вот этот запрос прекрасно работает


Цитата(Olesya @  15.1.2010,  11:40 Найти цитируемый пост)
так конечно же не работает,


Olesya, а ну давай признавайся, какую ошибку сервер возвращает smile ?!


--------------------
Слава Україні!
PM MAIL   Вверх
Olesya
Дата 15.1.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



просто ругается на "/", Token unknown...

Добавлено через 2 минуты и 50 секунд
по номеру поля у меня не группируется хоть ты тресни, я это уже тут писала. видимо версия плохая, но другой нету, работаем на этой, от меня тут ничего не зависит. 
PM MAIL   Вверх
Gluttton
Дата 15.1.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 7
Всего: 54



Цитата(Olesya @  15.1.2010,  12:00 Найти цитируемый пост)
просто ругается на "/", Token unknown..


Попробуй убрать пробелы перед и после знака деления.


--------------------
Слава Україні!
PM MAIL   Вверх
Olesya
Дата 15.1.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



Akella, не работает у меня так ((((((. думала, мож в пробелах дело, нет, то же самое, Token unknown ... /

Добавлено через 1 минуту и 48 секунд
Gluttton, как раз попробовала уже ))))). у меня наверное самая ужасная в мире версия Interbase 7.5
PM MAIL   Вверх
Deniz
Дата 15.1.2010, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Olesya, не совсем уж плохая версия.
давай еще вот так попробуй:
Код
select distinct a1.pole1/a1.pole2,
(select sum(a2.pole3) from a a2 where a1.pole1/a1.pole2 = a2.pole1/a2.pole2 )
from a a1
order by a.pole1/a.pole2
кривовато конечно, но все же ...
Приведи полный нормальный запрос с реальными полями. 
Все таки по номеру должно группироваться.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Olesya
Дата 15.1.2010, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



реальный запрос такой
Код

SELECT ITEM.ITEMCODE, ITEM.ITEMNAME, SUM(ITEMLINETRANS.BASE_QTY) AS QTY,
MyProc.PRICE AS PRICE,
SUM(ITEMLINETRANS.BASE_QTY * MyProc.PRICE) AS TOTALAMOUNT,
ITEM.TAXGRP1,
ITEMLINETRANS.CASE_COST/ITEMLINETRANS.CASE_FACTOR AS AVGCOST,
SUM(ITEMLINETRANS.CASE_QTY * ITEMLINETRANS.CASE_COST) AS AVGAMOUNT
FROM ITEM
inner join ITEMLINETRANS on ITEM.ITEMID = ITEMLINETRANS.ITEM_ID
inner join ITEMDOCTRANS on ITEMDOCTRANS.ITEMDOC_ID = ITEMLINETRANS.ITEMDOC_ID
left join ITEMPRICE_FROM_DATE(CAST(ITEMDOCTRANS.POSTED-1/86400 AS DATE), ITEM.ITEMID) MyProc on 1=1
WHERE ITEMDOCTRANS.DAYBATCH_ID >= 0
AND ITEMDOCTRANS.DAYBATCH_ID <= 535
AND ITEMDOCTRANS.ITEMDOCTYPE_ID = 2
AND ITEM.ISFUEL = 'F'
GROUP BY ITEM.ITEMCODE, ITEM.ITEMNAME, MyProc.PRICE, ITEM.TAXGRP1, ITEMLINETRANS.CASE_COST/ITEMLINETRANS.CASE_FACTOR
ORDER BY ITEM.ITEMCODE, ITEM.ITEMNAME, MyProc.PRICE, ITEM.TAXGRP1, ITEMLINETRANS.CASE_COST/ITEMLINETRANS.CASE_FACTOR


спасибо за заботу smile
PM MAIL   Вверх
Deniz
Дата 15.1.2010, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Olesya, знакомый запрос, я так понимаю это продолжение?
А так?
Код
SELECT 
  ITEM.ITEMCODE, 
  ITEM.ITEMNAME, 
  MyProc.PRICE AS PRICE,
  ITEM.TAXGRP1,
  ITEMLINETRANS.CASE_COST/ITEMLINETRANS.CASE_FACTOR AS AVGCOST,
  SUM(ITEMLINETRANS.BASE_QTY * MyProc.PRICE) AS TOTALAMOUNT,
  SUM(ITEMLINETRANS.BASE_QTY) AS QTY,
  SUM(ITEMLINETRANS.CASE_QTY * ITEMLINETRANS.CASE_COST) AS AVGAMOUNT
FROM ITEM
inner join ITEMLINETRANS on ITEM.ITEMID = ITEMLINETRANS.ITEM_ID
inner join ITEMDOCTRANS on ITEMDOCTRANS.ITEMDOC_ID = ITEMLINETRANS.ITEMDOC_ID
left join ITEMPRICE_FROM_DATE(CAST(ITEMDOCTRANS.POSTED-1/86400 AS DATE), ITEM.ITEMID) MyProc on 1=1
WHERE ITEMDOCTRANS.DAYBATCH_ID >= 0
AND ITEMDOCTRANS.DAYBATCH_ID <= 535
AND ITEMDOCTRANS.ITEMDOCTYPE_ID = 2
AND ITEM.ISFUEL = 'F'
GROUP BY 1, 2, 3, 4, 5
ORDER BY 1, 2, 3, 4, 5


Добавлено через 2 минуты и 21 секунду
Если ITEMLINETRANS.CASE_FACTOR (делитель) будет равен 0 или null будет исключение во время выполнения запроса, надо как-то обработать эту ситуацию. Что делать если 0 или null?


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Olesya
Дата 15.1.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



Deniz, да, это еще одна вариация его smile. ITEMLINETRANS.CASE_FACTOR по определению ни нулем ни null быть не может, тут все в порядке. а вот группировать по номеру столбца мой interbase отказывается напрочь. если бы все было так просто, я б еще в прошлый раз так сделала smile
PM MAIL   Вверх
Deniz
Дата 15.1.2010, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Olesya, этот запрос попробовала? Какую ошибку выдает?

Добавлено через 1 минуту и 26 секунд
А select ... from (select ... ) твоя версия понимает?


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Olesya
Дата 15.1.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



Да, конечно, Unknown token ... 1
PM MAIL   Вверх
Deniz
Дата 15.1.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Olesya, так что насчет 
Цитата(Deniz @  15.1.2010,  17:41 Найти цитируемый пост)
А select ... from (select ... ) твоя версия понимает? 

Можно, конечно, еще извратиться и написать процедуру
Код
create procedure MyProcDiv(var1 double precision, var2 double precision)
returns AvgCost double precision
as begin
  AvgCost = var1 / var2;
  suspend;
end
и потом ее в запрос
Код
SELECT ITEM.ITEMCODE, ITEM.ITEMNAME, SUM(ITEMLINETRANS.BASE_QTY) AS QTY,
MyProc.PRICE AS PRICE,
SUM(ITEMLINETRANS.BASE_QTY * MyProc.PRICE) AS TOTALAMOUNT,
ITEM.TAXGRP1,
  MyDiv.AvgCost as AVGCOST,
SUM(ITEMLINETRANS.CASE_QTY * ITEMLINETRANS.CASE_COST) AS AVGAMOUNT
FROM ITEM
inner join ITEMLINETRANS on ITEM.ITEMID = ITEMLINETRANS.ITEM_ID
inner join ITEMDOCTRANS on ITEMDOCTRANS.ITEMDOC_ID = ITEMLINETRANS.ITEMDOC_ID
left join ITEMPRICE_FROM_DATE(CAST(ITEMDOCTRANS.POSTED-1/86400 AS DATE), ITEM.ITEMID) MyProc on 1=1
left join MyProcDiv(ITEMLINETRANS.CASE_COST/ITEMLINETRANS.CASE_FACTOR) MyDiv on 1=1
WHERE ITEMDOCTRANS.DAYBATCH_ID >= 0
AND ITEMDOCTRANS.DAYBATCH_ID <= 535
AND ITEMDOCTRANS.ITEMDOCTYPE_ID = 2
AND ITEM.ISFUEL = 'F'
GROUP BY ITEM.ITEMCODE, ITEM.ITEMNAME, MyProc.PRICE, ITEM.TAXGRP1, AvgCost
ORDER BY ITEM.ITEMCODE, ITEM.ITEMNAME, MyProc.PRICE, ITEM.TAXGRP1, AvgCost
как-то так

Это сообщение отредактировал(а) Deniz - 15.1.2010, 15:11


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.1048 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.