Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с запросом (перекрёстный)!!! [D6, FB1.5]


Viktor1 ©   (2004-10-15 10:30:00) 

Добрый день Мастера!
Помогите сделать запрос (наверно перекрёстный)!
Имеется таблица с полями:

Дата       Тип     Зона   Колич
01.01.04   КЯ100   22     2
02.01.04   КЯ100   22     1
01.01.04   Р10     33     2
01.02.04   Р10     45     1
05.05.04   П25     77     1
05.05.04   П25     77     1

Выбрать с Дата1 по Дата2 (будет задаваться пользователем)
и получить такую таблицу:

Тип     Зона
       Sum(Колич)
наверно непонятно, может так лучше:

Тип      22     33     45    77    ...
КЯ100    3
Р10             2      1
П25                          2
...
Спасибо.


Deniz   (2004-10-16 08:12:00) [1]

Вот ведь, млин, опечатка влезла(group by на хватает) при моем посте и такая проблема вылезла :-(


Viktor1   (2004-10-15 15:10:00) [2]

Вот так вроде подходит

SELECT TYPE_OBORUD, ATS_OBORUD, SUM(KOLVO_OBORUD)
FROM oborud
WHERE DATE_OBORUD between '01.01.2000' and '31.12.2004'
GROUP BY TYPE_OBORUD, ATS_OBORUD
ORDER BY TYPE_OBORUD, ATS_OBORUD

Мне по работе надо уходить так что
Всем спасибо
Особенно
> tERRORist ©   (15.10.04 14:54) [15]
Пока!!


tERRORist   (2004-10-15 14:54:00) [3]

Date_oborud тоже добавь в GROUP BY:
GROUP BY TYPE_OBORUD, ATS_OBORUD, DATE_OBORUD


Viktor1   (2004-10-15 14:51:00) [4]

Поменял

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause).


tERRORist   (2004-10-15 14:46:00) [5]

Поменяй местами Order by и Group by. Order by - это сортировка она должна всегда быть в конце


Viktor1   (2004-10-15 14:38:00) [6]

Извеняюсь, последнее

ORDER BY DATE_OBORUD, TYPE_OBORUD
GROUP BY TYPE_OBORUD, ATS_OBORUD


Viktor1   (2004-10-15 14:37:00) [7]


> tERRORist ©   (15.10.04 14:35) [10]


SELECT TYPE_OBORUD, ATS_OBORUD, SUM(KOLVO_OBORUD)
FROM oborud
WHERE DATE_OBORUD between '01.01.2000' and '31.12.2004'
ORDER BY DATE_OBORUD, TYPE_OBORUD
GROUP BY DATE_OBORUD, TYPE_OBORUD

ATS - ЭТО ЗОНА.


tERRORist   (2004-10-15 14:35:00) [8]

Покажи полностью запрос


Viktor1   (2004-10-15 14:32:00) [9]


> tERRORist ©   (15.10.04 14:11) [8]


Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 5, char 1.
GROUP.


tERRORist   (2004-10-15 14:11:00) [10]

В конце запроса добавь GROUP BY "тип", "зона"...
т.е. все столбцы которые не суммируются


Viktor1   (2004-10-15 14:07:00) [11]


> Johnmen ©   (15.10.04 13:22) [6]

Подскажи, что не содержится с списке,
я 0


Johnmen   (2004-10-15 13:22:00) [12]

>Invalid expression in the select list (not contained in either
>an aggregate function or the GROUP BY clause).


Viktor1   (2004-10-15 13:17:00) [13]


> Deniz ©   (15.10.04 12:04) [3]


Ругается

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).


tERRORist   (2004-10-15 12:59:00) [14]

>На сервере тоже поддерживается execute statement в ХП, но
>результат надо куда-то выпихнуть, а если не знаешь сколько будет
>столбцов, то и непонятно сколько делать выходных параметров.
Т.е в FB в ХП нужно обязательно полностью задавать выходные параметры?
Если б был MSSQL я б извратился и составил динамический запрос прямо в ХП.


Deniz   (2004-10-15 12:04:00) [15]

> tERRORist ©   (15.10.04 11:21) [2]
> Так как наверно количество столбцов выводимых в ответе заранее
> не известно (сколько различных зон), то надо делать динамический запрос.
> Поддерживает ли FB1.5 динамические запросы?
> Т.е. что-то типа Execute('sql script')

Поддерживается:
Query.SQL.Clear;
Query.SQL.Text:='select .....';
Чем не динамический запрос? Вот только на клиенте ;-)
На сервере тоже поддерживается execute statement в ХП, но результат надо куда-то выпихнуть, а если не знаешь сколько будет столбцов, то и непонятно сколько делать выходных параметров.

> Viktor1   (15.10.04 10:30)
Примерно след.:
Query.SQL.Clear;
Query.SQL.Text:='select "тип", "зона", sum("колич") from table ' + ' where "дата" between :d1 and :d2 order by "дата", "тип"';
Query.Prepare;
Query>ParamByName('d1').AsDateTime:=...
Query>ParamByName('d2').AsDateTime:=...
Query.Open;

выберет все что нужно, а вот уже показать пользователю это дело отчета. Например: XLReport, FastReport это умеют. Можно и самому в EXCEL всё это правильно "запихать".


tERRORist   (2004-10-15 11:21:00) [16]

Так как наверно количество столбцов выводимых в ответе заранее не известно (сколько различных зон), то надо делать динамический запрос.
Поддерживает ли FB1.5 динамические запросы?
Т.е. что-то типа Execute('sql script')


Жук   (2004-10-15 11:14:00) [17]

Просто сделай запрос с группировкой и выводи результаты в отчёт, как тебе надо.


Наверх

Титульная страница Поиск, карта сайта Написать письмо