|
|
|
Можно ли updat - ить не использую курсора и #tmp
|
|||
|---|---|---|---|
|
#18+
Есть табличка в которой хранятся периодический реквизит (зависимый от года и месяца) - лимит разрешенных затрат. Справочник лимитов ---------------------------------------------------------- Клиент Год Месяц Лимит 1 2002 07 $100 2 2002 04 $200 2 2002 05 $150 3 2001 12 $300 3 2002 06 $400 ----------------------------------------------------------- Есть табличка которую нужно заполнить действующим на данный год и месяц значением ---------------------------------------------------------- Клиент Год Месяц Лимит($) 1 2002 07 2 2002 06 3 2002 05 ----------------------------------------------------------- Результат должен быть следующим ---------------------------------------------------------- Клиент Год Месяц Лимит($) 1 2002 07 100 2 2002 06 150 3 2002 05 300 ----------------------------------------------------------- Можно ли это сделать одним Update. То есть для каждого клиента из справочника выбрать дату равную или меньшую той что в исходной таблице. Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 15:06:22 |
|
||
|
Можно ли updat - ить не использую курсора и #tmp
|
|||
|---|---|---|---|
|
#18+
select t2.part_code , t2.YEAR_NUMBER*100+t2.MONTH_NUMBER ,max(t1.LIMIT_YEAR*100+t1.LIMIT_MONTH) from t2 join t1 on t2.part_code = t1.part_code and (t2.YEAR_NUMBER*100+t2.MONTH_NUMBER)>=(t1.LIMIT_YEAR*100+t1.LIMIT_MONTH) group by t2.part_code , t2.YEAR_NUMBER*100+t2.MONTH_NUMBER ----------------------------------------------- t1 - справочник t2 - исходная таблица ----------------------------------------------- Так я могу найти для каждого клиента дату лимита, но как для этой даты и этого клиента взять сумму лимита и засунуть ее UPDAt ом в исходную таблицу? Хотелось бы все это сделать ОДНИМ оператором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 15:46:51 |
|
||
|
Можно ли updat - ить не использую курсора и #tmp
|
|||
|---|---|---|---|
|
#18+
IMHO так немного попроще будет Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Но если вы пересмотрите вашу схему данных, а именно добавите первичный ключ в "Справочник лимитов", то реализация подобных ( а может и вообще всех запросов) станет куда как проще Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. А при наличии индексов производительность еще более возрастет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 17:22:54 |
|
||
|
Можно ли updat - ить не использую курсора и #tmp
|
|||
|---|---|---|---|
|
#18+
Большое спасибо. До даты добрались. Может и до значения лимита как нибудь... с помощью энтой даты и кода клиента. И хотелось бы этот лимит засунуть в исходную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 17:50:55 |
|
||
|
Можно ли updat - ить не использую курсора и #tmp
|
|||
|---|---|---|---|
|
#18+
Виноват, поторопился, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2002, 17:56:49 |
|
||
|
Можно ли updat - ить не использую курсора и #tmp
|
|||
|---|---|---|---|
|
#18+
GLORY К сожалению второй вариант не имеет стопроцентной надежности если лимиты будут вводиться с пропусками месяцов (а это вполне возможно), а потом пользователь (если не запретить (а запретить возможно будет и нельзя)) введет в пропуск еще одну запись. Например; март, май, а потом апрель! Я считаю что вместо identity все же лучше использовать уникальный сурогатный ключ из года и месяца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 10:39:18 |
|
||
|
Можно ли updat - ить не использую курсора и #tmp
|
|||
|---|---|---|---|
|
#18+
Согласен. Можно использовать более дорогостоящий запрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Можно конечно использовать и составной первичный ключ (только он все таки будет клиент+год+месяц). Только такой ключ IMHO потребует б`ольших затрат на программирование Код: plaintext 1. 2. 3. 4. 5. 6. 7. Что для вас лучше - решать вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 11:55:03 |
|
||
|
Можно ли updat - ить не использую курсора и #tmp
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 12:16:12 |
|
||
|
Можно ли updat - ить не использую курсора и #tmp
|
|||
|---|---|---|---|
|
#18+
GLORY Прежде чем к году прибавить месяц, я его умножаю на 100. Иначе если в t2 - январь 2002, а в справочннике - декабрь 2001 - ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 12:57:34 |
|
||
|
Можно ли updat - ить не использую курсора и #tmp
|
|||
|---|---|---|---|
|
#18+
Если вы заметили, что в моем примере поля Год и Месяц - символьные. Поэтому никаких проблем нет. Можете убедиться на примере клиента 3 (для '2002', '05' из t2 извлекается '2001', '12', 300 из t1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2002, 13:08:27 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=46&tid=1820664]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 292ms |

| 0 / 0 |
