Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.037 c
1-1099304890
kirilllius
2004-11-01 13:28
2004.11.14
Массив типа TImage


1-1099384385
WondeRu
2004-11-02 11:33
2004.11.14
Assert... Зачем он нужен???


1-1099130115
Stype
2004-10-30 13:55
2004.11.14
String to PAnsiChar


1-1099093278
Garfunkel
2004-10-30 03:41
2004.11.14
Прокручивающийся текст


14-1099035098
pppp
2004-10-29 11:31
2004.11.14
Информация к размышлению





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский