|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
Привет. Помогите пожалуйста написать запрос. Есть такая таблица: а1 а2 а3 а4 а5 январь 01 500 31.01.2002 0 февраль 01 700 28.02.2002 500 апрель 01 800 31.05.2002 1200 ноябрь 03 100 30.11.2002 0 ... нужно получить столбец а5 по принципу: для строки апрель 01 столбец а5 =сумме а3 за февраль и январь и т.п. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2002, 17:25 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
Было бы неплохо, чтобы в а1 были не названия месяцев, а их номера, подумай сама, как твои месяцы сортировать то? далее придется, думаю, создать хранимую процедуру в которую передавалось бы значения из а1 и а2, тогда запрос выглядел бы так select a1,a2, storedproc1(a1,a2) from youtable процедура create storedproc1( a1: integer, a2: integer,) return a5: float as begin select sum(a3) from youtable where a1<=:a1 and a2=:a2 into :a5; suspend; end ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2002, 19:45 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
Насколько я понял, в a4 содержится дата, соответствующая последнему дню месяца. Для сортировки можно использовать ее. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2002, 08:54 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
И еще, IMHO такой вызов хранимой процедуры в select-е Interbase не поддерживает ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2002, 09:02 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
Это какой-токой вызов ХП IB не поддерживает? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2002, 12:23 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
Решила написать полностью процедуру, пишу: select t.a4 from t into :a4; select sum(t.a3),t.a2 from t where t.a4>:a4 group by t.a2 into :a3,:a2; for select t.a1 from t where t.a2=:a2 into :s do begin update t set a5=:s;end Ошибок не выдает, но процедура не проходит.Помогите пожалуйста разобраться. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2002, 14:05 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
select sum(a3) as a5 from mytab where extract(month from a4)<нужного месяца ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2002, 16:49 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
Думаю простым Update дело не обойдется. Нужно написать тригер на Insert и Update для данной таблицы, дабы поддерживать описуемый порядок. Однако ж долго он будет работать, если таблица большая. Стоит подумать, а нужен ли столбец а5, если его можно вычислить. Так что не бери дурного в голову, а пользуйся хитрым селектом и процедурой. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2002, 10:16 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
Создаю таблицу: CREATE TABLE YOUTABLE ( A0 INTEGER, - номер месяца 1..12, уж извини A1 VARCHAR (10) character set WIN1251 collate WIN1251, A2 INTEGER, A3 FLOAT, A4 DATE, A5 FLOAT); - заметь не использовал пишу процедуру (навскидку написал, но проверил работает) CREATE PROCEDURE YOUSP RETURNS ( MESAC VARCHAR (10), CATEGOR INTEGER, AA3 FLOAT, AA4 DATE, SUMMA FLOAT) AS declare variable mes integer; BEGIN for select distinct a0,a2 from youtable order by a0,a1 into :mes,:categor do begin for select a1,a2,a3,a4 from youtable where a0=:mes and a2=:categor into mesac,categor,aa3,aa4 do begin select sum(a3) from youtable where a0<:mes and a2=:categor into :summa; suspend; end end END Ну? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2002, 11:07 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
У меня никак не получается вызвать в Select-е хранимую процедуру запросом типа: Код: plaintext 1. 2. 3.
Не проходит и вариант Код: plaintext 1. 2. 3.
Такой вызов в некоторых случаях был бы достаточно удобен. В документации ХП из Select-а предлагается вызывать так: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2002, 13:38 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
для Acue теперь предлагается select * from YouSP() - Это чтоб просто получить данные А слабо вызвать SELECT Y.A0, Y.A2, (SELECT A5 FROM STOREDPROC1(Y.A0, Y.A2)) AS FIELD_NAME72 FROM YOUTABLE Y ? процедура CREATE PROCEDURE STOREDPROC1 ( A0 INTEGER, A2 INTEGER) RETURNS ( A5 FLOAT) AS begin select sum(a3) from youtable where a0<:a0 and a2=:a2 into :a5; suspend; end Пришлось добавить в таблицу а0 - для номера месяца ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2002, 15:17 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
И все работает, такой простой синтаксис, даже обидно... Спасибо за науку ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2002, 16:01 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
Всем большое спасибо, попробую ваши варианты и напишу о результатах. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2002, 16:08 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
to Acue Дело в том, что в IB таблицы и представления рассматриваются как отношения и при разборе запроса оптимизатор сначала выполняет соединение по индексам, а потом выбирает данные. ХП не являетс отношением => соединения типа select b.ВЫХ_ПАРАМ_1_ПРОЦЕДУРЫ, ..., b.ВЫХ_ПАРАМ_n_ПРОЦЕДУРЫ from ТАБЛИЦА a, ПРОЦЕДУРА(a.ПОЛЕ_ТАБЛИЦЫ) b работеть не будет. Процедуры можно вызывать слева от LEFT JOIN, когда есть цикл по основной таблице. Возможно, можно также в подзапросах - не пробовал. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2002, 16:20 |
|
Помогите пожалуйста с запросом.
|
|||
---|---|---|---|
#18+
Вот ещё: я сначала не увидел, что там глупость в вызове процедуры: Код: plaintext
так это можно легко исправить: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2002, 16:29 |
|
|
Start [/forum/topic.php?fid=40&tid=1581007&gotonew=1]: |
0ms |
get settings: |
1ms |
get forum list: |
12ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
40ms |
get topic data: |
12ms |
get first new msg: |
1ms |
get forum data: |
1ms |
get page messages: |
29ms |
update_topic_read_status (1581007): 16.12.2002 17:12:00: |
0ms |
get tp. blocked users: |
0ms |
get online users: |
24ms |
check new: |
1ms |
others: | 81ms |
total: | 204ms |
0 / 0 |