Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

Помогите с запросом (перекрёстный)!!!   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.059 c
3-1098079804
goldenmax
2004-10-18 10:10
2004.11.14
Как скопировать таблицу DBF в IB.


14-1099038151
}|{yk
2004-10-29 12:22
2004.11.14
Умберто Эко. Имя розы.


14-1098657565
Profi
2004-10-25 02:39
2004.11.14
Заболел!!!


6-1094458503
Cuest
2004-09-06 12:15
2004.11.14
TTelefoon


14-1098430322
NewDelpher
2004-10-22 11:32
2004.11.14
Умение водить автомобиль