Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сдвинуть значения столбцов относительно друг друга / 8 сообщений из 8, страница 1 из 1
28.06.2001, 10:33
    #32008552
Konnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сдвинуть значения столбцов относительно друг друга
Есть таблица с двумя столбцами:

Условное_обозначение, Величина
О 2
О 4
Т 6
О 8
С 10
С 12

Необходимо сдвинуть значения столбца "Условное_обозначение" относительно "Величины", скажем на 3 строки, т.е. должно получиться следующее

Условное_обозначение, Величина
О 2
С 4
С 6
О 8
О 10
Т 12
...
Рейтинг: 0 / 0
28.06.2001, 10:36
    #32008553
lodevar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сдвинуть значения столбцов относительно друг друга
как насчет временной таблицы?
...
Рейтинг: 0 / 0
28.06.2001, 11:40
    #32008560
andy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сдвинуть значения столбцов относительно друг друга
Сделайте поле с автоинкрементом в этой таблице (id), затем перенесите его и, скажем, Величину в другую таблицу, там увеличьте значения поля id на скажем 3, а затем 3 самых больших сделайте 1,2,3 и собственно можно выбирать Условное обозначение из первой таблицы, а величину из второй, а пересекать их по id.
...
Рейтинг: 0 / 0
28.06.2001, 11:57
    #32008563
Konnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сдвинуть значения столбцов относительно друг друга
Всем огромное спасибо!
Прочел ваши ответы и меня осенило!!!!!
Поле "Величина" у меня кратная, поэтому вроде все получается сразу

set d=8
update t1
set t1.c=t2.c
from prob t1, prob t2
where (t1.i+d=t2.i and
t1.i+d<=(select max(i) from prob))or
(t1.i+d>(select max(i) from prob)and
t2.i=t1.i+d-(select max(i) from prob))

где с-"Условное_обозначение", i- "Величина"
...
Рейтинг: 0 / 0
28.06.2001, 11:59
    #32008564
dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сдвинуть значения столбцов относительно друг друга
Во-первых, задача поставлена не совсем корректно. Она предполагает что записи идут в таблице именно в таком порядке, как Вы это предполагаете. На самом же деле они могут идти в каком то дргом порядке. Соответственно будет нарушена логика. Исключение - если данные которые надо переставить упорядочены по одному из столбцов (на логическом уровне). Т.е конкретно Ваш пример можно решить но пример вида
О 112
О 4
Т 6
О 8
С 10
С 12
решить навряд ли получится. Т.е. он может решится, но при добавлении новых данных работать некорректно.
Ну а если исходные данные изначально логически упорядочены, тогда так:

create table sourcetab(a varchar, b int)
insert into sourcetab values ('О',2)
insert into sourcetab values ('О',4)
insert into sourcetab values ('Т',6)
insert into sourcetab values ('О',8 )
insert into sourcetab values ('С',10)
insert into sourcetab values ('С',12)

---------------------------------------
Create table #temp (id int identity, a varchar, b int)
insert into #temp(a,b) select * from sourcetab order by b
declare @num int
select @num=count(*) from #temp
select t1.a, t2.b from #temp t1 join #temp t2 on t1.id-1=(t2.id+2) % @num
drop table #temp
...
Рейтинг: 0 / 0
28.06.2001, 13:22
    #32008582
Konnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сдвинуть значения столбцов относительно друг друга
Dmitry Объясните чайнику где сдвиг.
...
Рейтинг: 0 / 0
29.06.2001, 05:03
    #32008603
lodevar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сдвинуть значения столбцов относительно друг друга
Не сдвиг, а новая таблица.
...
Рейтинг: 0 / 0
29.06.2001, 08:23
    #32008615
dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сдвинуть значения столбцов относительно друг друга
2 konik: Не понял, Вы хотите сказать, что у Вас не сдвигается что ли???
У меня из Вашего примера
О 2
О 4
Т 6
О 8
С 10
С 12

получается то что Вы же и хотите получить:
О 2
С 4
С 6
О 8
О 10
Т 12
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сдвинуть значения столбцов относительно друг друга / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]