![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с запросом (перекрёстный)!!! [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]Просто сделай запрос с группировкой и выводи результаты в отчёт, как тебе надо.