powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Клонирование записей в рамках одной таблицы
5 сообщений из 5, страница 1 из 1
Клонирование записей в рамках одной таблицы
    #40000692
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую форумчан.

Подскажите пожалуйста, как лучше выполнить клонирование определённых записей в рамках одной таблицы с применением некоторой функции к одному из полей?

Значит, есть исходные данные такие:
Код: plaintext
1.
2.
3.
 PointID	SubPointID	Value		FreqT 
61	44352		8		1120	
61	44353		12		1220	
61	44356		8		1243

мне нужно их отобрать и склонировать в эту же таблицу, но прежде применить следующие правила:
а) Поле Value если больше 10, то отображать 10, иначе текущее значение;
б) Поле FreqT возвести в квадрат;
в) Поле PointID изменить с 61 на 99;
в итоге, получим следующие данные для insert'a:
Код: plaintext
1.
2.
3.
 PointID	SubPointID	Value		FreqT 
 99 	44352		8		 1254400 	
 99 	44353		 10 		 1488400 	
 99 	44356		8		 1545049 

сейчас я тупо делаю селект, и прогоняю записи, генеря скрипт с инсертами. Но это не по фен-шую.
Круто было бы если бы можно было бы сделать вычисляемые поля, но только на отдельные записи (напр. только где PointID=61).

Ну или, я ещё вижу конструкцию типа:
Код: sql
1.
2.
3.
DELETE FROM t WHERE PointID = 99;
INSERT INTO t (99, t2.SubPointID, t2.Value, t2.FreqT ^ 2) 
FROM (select SubPointID, Value, FreqT FROM t WHERE PointID = 61) as t2 


(сорри, скорей всего не верный синтаксис)


Подскажите вариант, как оформить верный синтаксис.
...
Рейтинг: 0 / 0
Клонирование записей в рамках одной таблицы
    #40000695
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
palladin600,

И чем вас эта 2-я конструкция не устраивает?
Правда, непонятно, нафига там delete

а так, имхо, все правильно
Код: sql
1.
2.
INSERT INTO t (PointID, SubPointID, Value, FreqT ) 
select 99, SubPointID, case when Value>10 then 10 else Value end, FreqT*FreqT FROM t WHERE PointID = 61
...
Рейтинг: 0 / 0
Клонирование записей в рамках одной таблицы
    #40000696
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
godsql
Правда, непонятно, нафига там delete


delete для того, что записи, которые имеют PointID=61, они постоянно меняются. Т.е. сейчас 100 таких записей, через час может быть 150, завтра 90.
А по ним, уже есть клоны (те, что с PointID=99).
Поэтому, надо старые клоны удалить, и сформировать новые. Эдакий фантом, который по сути базируется на первоначальных данных.
Пользователь БД оперирует только записями с ID=61. Как только он проделал манипуляции (INS/UPD/DEL), необходимо создать на их основе вычисленные записи с ID=99.

Вот примерно такая схема работы.
...
Рейтинг: 0 / 0
Клонирование записей в рамках одной таблицы
    #40000769
Penner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT INTO #Temp FROM (SELECT ....)
UPDATE #Temp ....
INSERT INTO ... SELECT #Temp
...
Рейтинг: 0 / 0
Клонирование записей в рамках одной таблицы
    #40000774
Агрох
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нужно ли строго хранить эти данные, с PointID = 99, в таблице?
Вижу решение через создание представления вида:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE VIEW ViewName1 AS
SELECT PointID, SubPointID, Value, FreqT 
FROM t 

UNION ALL

SELECT 99 AS PointID, SubPointID, case when Value>10 then 10 else Value end AS Value, FreqT ^ 2 AS FreqT
FROM t 
WHERE t = 61
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Клонирование записей в рамках одной таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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