|
|
|
новичок
      
участник
Last Login: 21.11.2005 3:28
Сообщ.: 3,
Visits: 34
|
|
Помогите пожалуйста!
Как из одной таблицы сначала выбрать записи по
равенству записей полей, разнится лишь поле "месяц",
потом в этих записях сделать замену, например:
в 1 месяц в поле1 вставить запись поля2 из 2 месяца,
во 2 месяц в поле1 вставить запись поля2 из 3 месяца и т.д.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Вопрос непонятен. Уточни его, пожалуйста. Интересует структура таблицы и пример того как должны измениться данные. То есть были такие такие строки, а стали вот такие.
|
|
|
|
|
новичок
      
участник
Last Login: 21.11.2005 3:28
Сообщ.: 3,
Visits: 34
|
|
Сейчас немного переделала таблицу, но вопрос остался.
Структура такая: pole1, pole2, mes, period, zn
Выбираю в новую таблицу записи с периодом 102 за 2 месяц,
обновляю в новой таблице "period" - 102 на 101,
а в "mes" - 2 на 1.
Затем в первой таблице нужно удалить записи с периодом
101 и месяцем 1, чтобы вставить записи из новой.
Как это сделать? Или может как-то заменить записи без
создания промежуточной таблицы? Этот запрос
возможно ли сделать универсальным для всего
года, впрочем меняются только данные
за предыдущий месяц.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
[quote="eva_yk"]Сейчас немного переделала таблицу, но вопрос остался.
Структура такая: pole1, pole2, mes, period, zn
Выбираю в новую таблицу записи с периодом 102 за 2 месяц,
обновляю в новой таблице "period" - 102 на 101,
а в "mes" - 2 на 1.
Затем в первой таблице нужно удалить записи с периодом
101 и месяцем 1, чтобы вставить записи из новой.
Как это сделать? Или может как-то заменить записи без
создания промежуточной таблицы? Этот запрос
возможно ли сделать универсальным для всего
года, впрочем меняются только данные
за предыдущий месяц. [/quote]
а если так:
delete from tablename
where period=101 and mes=1
go
update tablename
set period=101, mes=1
where period=102 and mes=2
go
|
|
|
|
|
новичок
      
участник
Last Login: 21.11.2005 3:28
Сообщ.: 3,
Visits: 34
|
|
Спасибо нормально прошло, но при этом исчезли записи
по 2 месяцу, немного оптимизировала и получила следующее:
SELECT *
INTO tab1
FROM fd_1001
WHERE (усл1) And (усл2) And (mes=2) And (period=102)
UPDATE tab1 SET mes = mes-1, period = 101
DELETE FROM fd_1001
WHERE (усл1) And (усл2) And (mes=1) And (period=101)
INSERT INTO fd_1001
SELECT *
FROM tab1
DROP TABLE tab1;
А возможно ли избежать промежуточной tab1?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
| Я в MS SQL нулевой.. Из познаний: может, переменные временные применить ? Или написать ХП и уже ее с соответсвующими параметрами исполнять ?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
Если честно, я так и не понял, зачем такие телодвижения ?
если так ?
insert into fd_1001
(field1, field2,...,fieldN, period, mes)
select field1, field2,...,fieldN, period-1, mes-1 from
fd_1001
where mes=2 and period=102..
А там - кто его знает, что есть на самомо деле.. Тут вопрос, как поступить с PERIOD=101 и MES=1
|
|
|
|