Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2014, 09:46   #1
igbizon
 
Регистрация: 02.09.2008
Сообщений: 7
По умолчанию Update строк значениями других строк из этой таблицы?

Добрый день!
Вопрос такого плана:
Таблица примерно следующая
id |id_f |field |
...
2147 77 Иванов
2147 79 abc
...

В таблице имеется по две строки с одним id. Нужно апдейтить стобец field, причем нужно в строку с id_f=79 вставить значение field строки с id_f=77, т.е. вместо 'abc' должно быть 'Иванов' для id 2147, а для других id соответственно другие значения. Набор таких пар строк может быть сколь угодно большим.
Прошу помощи!
igbizon вне форума Ответить с цитированием
Старый 28.08.2014, 09:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Нескромный вопрос: А почему такое понадобилось?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2014, 09:55   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

На словах - обновлять только те, у которых по две записи с одинаковым id и только последнюю из них при сортировке по возрастанию id_f значением из первой записи при той же сортировке. Реализация сильно зависит от СУБД. Если не разовая работа, то явно какие-то несуразицы с устройством базы или технологии обработки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.08.2014, 11:45   #4
igbizon
 
Регистрация: 02.09.2008
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Нескромный вопрос: А почему такое понадобилось?
Затем что id_f это доп. свойства. И многие люди одну часть (id_f=77) заполнили, а другую (id_f=79) не заполнили. Раньше было не обязательно заполнение. Накопилось много тысяч таких вот полузаполненных доп. свойств. Ручками большой геморр это делать. СУБД MSSQL 2008R2.

Цитата:
Сообщение от Аватар Посмотреть сообщение
На словах - обновлять только те, у которых по две записи с одинаковым id и только последнюю из них при сортировке по возрастанию id_f значением из первой записи при той же сортировке. Реализация сильно зависит от СУБД. Если не разовая работа, то явно какие-то несуразицы с устройством базы или технологии обработки
В том и дело разовое занятие. Надо заполнить и забыть. Теперь эти поля обязательны для заполнения.
На словах я понимаю как это сделать, а вот в запросе нет.

Последний раз редактировалось Stilet; 28.08.2014 в 11:49.
igbizon вне форума Ответить с цитированием
Старый 28.08.2014, 12:07   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Как-то в этом направлении, не отлаживал ест-но, так что 100 раз отмерь и раз отрежь
Код:
-- Во временную таблицу все id записей, которых 2, при этом id_f у них разные
SELECT T1.id
  INTO #Temp1
  FROM MyTable T1
  WHERE (SELECT COUNT(*) FROM MyTable T2 WHERE T2.id=T1.id GROUP BY T2.id,T2.id_f)=1
  GROUP BY T1.id
  HAVING COUNT(*)=2

UPDATE MyTable
  SET field=(SELECT TOP 1 T3.field FROM MyTable T3 WHERE T3.id=T1.id ORDER BY T3.id_f)
  FROM MyTable T1,#Temp1 U
  WHERE T1.id=U.id AND
        T1.id_f=(SELECT TOP 1 T2.id_f FROM MyTable T2 WHERE T2.id=T1.id ORDER BY T2.id_f DESC)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.08.2014, 12:20   #6
igbizon
 
Регистрация: 02.09.2008
Сообщений: 7
По умолчанию

Я тоже думал о временной таблице. Есть тестовая база, на ней можно тестить. Спасибо большое.
igbizon вне форума Ответить с цитированием
Старый 28.08.2014, 13:18   #7
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Во временную таблицу все id записей, которых 2, при этом id_f у них разные
Временные таблицы -- зло. Раз MS SQL 2008, в нем можно использовать аналитическую функцию. Когда-то ведь нужно и новое изучать, а тут такой великолепный повод.
Vapaamies вне форума Ответить с цитированием
Старый 28.08.2014, 13:31   #8
igbizon
 
Регистрация: 02.09.2008
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Временные таблицы -- зло. Раз MS SQL 2008, в нем можно использовать аналитическую функцию. Когда-то ведь нужно и новое изучать, а тут такой великолепный повод.
Что за функция такая? Какое название? Учиться всегда хорошо.
igbizon вне форума Ответить с цитированием
Старый 28.08.2014, 13:43   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Временные таблицы -- зло.
Для разовой работы? Не смешно, но весьма удобно
Цитата:
Когда-то ведь нужно и новое изучать, а тут такой великолепный повод.
Это да, ТС карты в руки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.08.2014, 09:09   #10
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от igbizon Посмотреть сообщение
Что за функция такая? Какое название? Учиться всегда хорошо.
Аналитические функции -- это конструкции вида:
Код:
<нечто> over (partition by ла_ла_ла order by та_та_та)
Тут <нечто> -- и есть аналитическая функция: min, max, avg, lag, first, last и пр.

На уровне концепций аналитическая функция -- нечто вложенного запроса group by, выполняющегося одновременно с самой выборкой и потому не создающего дополнительных накладных расходов.
Vapaamies вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строк с одинаковыми значениями artsanox Microsoft Office Excel 3 09.12.2013 04:45
Для матрицы из 3 столбцов и 7 строк отпечатать номера тех строк, в которых третий элемент больше суммы двух других элементов строк abramov Помощь студентам 2 03.12.2013 10:15
Добавление строк с отсутсвующими значениями zenner Microsoft Office Excel 7 27.02.2012 16:07
Закрашивание строк с повторяющимися значениями SergioSolo Microsoft Office Excel 3 08.02.2011 23:07
Удаление строк с повторяющимися значениями satten Microsoft Office Excel 11 01.12.2009 07:50