Форум: "Базы";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизПомогите с запросом (перекрёстный)!!! Найти похожие ветки
← →
Viktor1 (2004-10-15 10:30) [0]Добрый день Мастера!
Помогите сделать запрос (наверно перекрёстный)!
Имеется таблица с полями:
Дата Тип Зона Колич
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
...
Спасибо.
← →
Жук © (2004-10-15 11:14) [1]Просто сделай запрос с группировкой и выводи результаты в отчёт, как тебе надо.
← →
tERRORist © (2004-10-15 11:21) [2]Так как наверно количество столбцов выводимых в ответе заранее не известно (сколько различных зон), то надо делать динамический запрос.
Поддерживает ли FB1.5 динамические запросы?
Т.е. что-то типаExecute("sql script")
← →
Deniz © (2004-10-15 12:04) [3]> 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 12:59) [4]>На сервере тоже поддерживается execute statement в ХП, но
>результат надо куда-то выпихнуть, а если не знаешь сколько будет
>столбцов, то и непонятно сколько делать выходных параметров.
Т.е в FB в ХП нужно обязательно полностью задавать выходные параметры?
Если б был MSSQL я б извратился и составил динамический запрос прямо в ХП.
← →
Viktor1 (2004-10-15 13:17) [5]
> 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).
← →
Johnmen © (2004-10-15 13:22) [6]>Invalid expression in the select list (not contained in either
>an aggregate function or the GROUP BY clause).
← →
Viktor1 (2004-10-15 14:07) [7]
> Johnmen © (15.10.04 13:22) [6]
Подскажи, что не содержится с списке,
я 0
← →
tERRORist © (2004-10-15 14:11) [8]В конце запроса добавь GROUP BY "тип", "зона"...
т.е. все столбцы которые не суммируются
← →
Viktor1 (2004-10-15 14:32) [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:35) [10]Покажи полностью запрос
← →
Viktor1 (2004-10-15 14:37) [11]
> 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 - ЭТО ЗОНА.
← →
Viktor1 (2004-10-15 14:38) [12]Извеняюсь, последнее
ORDER BY DATE_OBORUD, TYPE_OBORUD
GROUP BY TYPE_OBORUD, ATS_OBORUD
← →
tERRORist © (2004-10-15 14:46) [13]Поменяй местами Order by и Group by. Order by - это сортировка она должна всегда быть в конце
← →
Viktor1 (2004-10-15 14:51) [14]Поменял
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:54) [15]Date_oborud тоже добавь в GROUP BY:
GROUP BY TYPE_OBORUD, ATS_OBORUD, DATE_OBORUD
← →
Viktor1 (2004-10-15 15:10) [16]Вот так вроде подходит
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]
Пока!!
← →
Deniz © (2004-10-16 08:12) [17]Вот ведь, млин, опечатка влезла(group by на хватает) при моем посте и такая проблема вылезла :-(
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.032 c