Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
Если можно то помогите пожалуйста по 2-м вопросам 1 Можно ли использовать свои функции в SELECT ? Мне нужно выполнить примерно следующее SELECT ostmet_cex_sql.nnkor,ostmet_cex_sql.kodc_iz,ostmet_cex_sql.kei, osm_nm,ostmet_cex_sql.data_m,; ostmet_cex_sql.pol_met,ostmet_cex_sql.nnkor,my_sum(tmp2.s_det) as rasx; FROM ostmet_cex_sql; INNER JOIN tmp2 ON ostmet_cex_sql.nnkor= tmp2.nnkor AND ostmet_cex_sql.kodc_iz= tmp2.kod_c ; INTO CURSOR ostmet_sql ******* FUNCTION my_sum PARAMETERS kol_det sumras=0 DO CASE CASE ALLTRIM(ostmet_cex_sql.kei)='50' sumras=ROUND(tmp2.s_det*tmp2.nras1,3) CASE ALLTRIM(ostmet_cex_sql.kei)=ALLTRIM(tmp2.kei2) sumras=ROUND(tmp2.s_det*tmp2.nras2,3) ENDCASE RETURN sumras 2 Можно ли 2 нижеследующих SELECT объединить в один *---- объединим 1 и 2 таблицу в одну SELECT detali_cur.mod_d, detali_cur.nd_d, detali_cur.suf_d, detali_cur.kod_c, detali_cur.s_det, complekt_nn_sql.nnkor,complekt_nn_sql.nras1, ; complekt_nn_sql.kei1, complekt_nn_sql.nras2,complekt_nn_sql.kei2 ; FROM detali_cur, complekt_nn_sql ; WHERE detali_cur.ntm=2 AND detali_cur.kod_c= complekt_nn_sql.kodc_iz AND detali_cur.s_det#0 AND ; detali_cur.mod_d+ detali_cur.nd_d+ detali_cur.suf_d = ; complekt_nn_sql.mod_d+ complekt_nn_sql.nd_d+ complekt_nn_sql.suf_d ; INTO CURSOR tmp1 READWRITE *--- Пересчитаем общее количество изготовленных деталей по одинаковым * nnkor,kod_c, ) SELECT tmp1.nnkor, tmp1.kod_c, sum(s_det) as s_det, tmp1.nras1, tmp1.kei1, tmp1.nras2,tmp1.kei2; FROM tmp1 GROUP BY tmp1.nnkor, tmp1.kod_c ; INTO CURSOR tmp2 Заранее спасибо! И прошу не ругаться если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 08:34 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
1 можна. тока добафь еще параметры на ostmet_cex_sql.kei, tmp2.nras1 и прочие - вопщем пользовать не значения из таблиц, а чиста переменные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 09:04 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
to Hel!Riser Т.е сначала сливаем все вместе а потом делаем перерасчет по REPLASE? Я уже сделал подгругому проиндексировал tmp2 установил связь между таблицами и сделал Replase . Просто думал что если бы можно использовать в SELECT свои функции было бы быстрее и удобнее . Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 09:49 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
Не. т.е ф-ци немножка переделываем на так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 10:23 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
to Hel!Riser Ура! Заработало! По-крайней мере возвращаются различные значения а не как было у меня- у всех записей одно значение . Значит в функцию необходимо брать все необходимое для расчета. "Все свое ношу с собой" Большое спасибо!!!!!!!!!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 10:40 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
По поводу второго вопроса, не вижу проблем Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 11:00 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
Не стоит использовать в селектах собственные функции, которые сами читают из таблиц и/или передергивают указатели записи в таблицах. Правильно: Код: plaintext 1. 2. 3. 4. Неправильно: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 11:12 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
to ВладимирМ Спасибо! Все нормально. И попутно еще вопрос: можно ли чтобы в SELECTе результат выводился в курсор, который участвует в построени текущего запроса (например для первого вопроса результат выводился в курсор ostmet_cex_sql ). У меня выдается ошибка. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 11:39 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
nfp можно ли чтобы в SELECTе результат выводился в курсор, который участвует в построени текущего запроса (например для первого вопроса результат выводился в курсор ostmet_cex_sql ). У меня выдается ошибка. Спасибо! В Фоксе под ДОС такое было возможно (Select * from Query where... into cursor Query). А вот в Visual Фоксе эту возможность, похоже, убрали. А жаль... Хотя, с другой стороны, ошибок должно стать меньше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 12:01 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
2Станислав С. Ну до VFP7 тоже можно, выше не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 12:10 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
Попробовал для другого курсора все сработало! А в данном случае причина наверно следующая : Я сначала сделал курсор, а затем выполнил ALTER TABLE ostmet_cex_sql ADD COLUMN !!!!!! (не получился а меня код с SELECT ) и у меня курсор превратился в таблицу, а с таблицами такое видимо не катит! Большое всем спасибо!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 13:36 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
to: Urri. "Не стоит использовать в селектах собственные функции, которые сами читают из таблиц и/или передергивают указатели записи в таблицах." Ну не знаю... Всегда их использую. Select padr(naimtow(kodtow),200) as naim,; padr(naimediz(kodediz),10) as edizm,; Round(Ostatok(kodtow),16,2) as ostatok; from ... и все такое Может есть более читаемое решение? На скорости <=100000 записей - особо не отражается, а программа читается куда лучше чем с JOIN ...(Вообще JOIN не пользуюсь...) ИМХО. Или я сильно ошибаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 10:33 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
Скажем, это общее пожелание. При невыполнении которого запрос может работать правильно, а может и глючить. В случае, подобном Вашему, я бы не стал использовать функции, а либо за join ил справочник товаров и таблицу остатков, единиц измерения и остатков. Хотя бы потому, что работать должно намного быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 13:22 |
|
||
|
Помогите с SELECT
|
|||
|---|---|---|---|
|
#18+
Hi Urri! > Не стоит использовать в селектах собственные функции, которые сами читают > из таблиц и/или передергивают указатели записи в таблицах. Можно, если осторожно :) Главное не трогать тот(те) курсор(ы) над которым(и) работает сам SELECT - т.е. открыть для своих целей отдельный курсор - USE ... AGAIN ... Ну и ессно там уже самому позиционироваться куда нужно - т.е. как минимум в такую UDF надо передавать первичный ключ... Работает БЕЗ проблем. Конечно если функция тривиальная, и решается всё через JOIN или подзапрос - то так лучше и делать, ну а уж если хитрый расчёт, или скажем надо обработать много записей (связанных с ОДНОЙ в результате) - и НЕ по COUNT/MIN/MAX/SUM/AVG - тогда UDF и поможет... Если не делать конечно вместо запроса простой "SCAN с заполнением курсора" Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2004, 02:39 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32815595&tid=1595221]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 356ms |

| 0 / 0 |
