Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Update дублей разными значениями  [new]
ScareCrow100500
Member

Откуда:
Сообщений: 3
Здравствуйте. Подскажите пожалуйста как можно обновить строки с одинаковым значением в столбце а, что бы в столбце b были разные значения.

Нужно что бы точно так же подставились значения в таблицу #TT, как и в таблице #TD

IF OBJECT_ID('tempdb..#TT') > 0 
BEGIN
  DROP TABLE #TT
END 

CREATE TABLE #TT

(
  ExemplarName varchar(200) 
 , LozonExemplarID int 

) 


IF OBJECT_ID('tempdb..#TD') > 0 
BEGIN
  DROP TABLE #TD
END 

CREATE TABLE #TD
(
  ExemplarName varchar(200) 
, ExemplarID  int 
) 



INSERT INTO #TT SELECT 'a', NULL
INSERT INTO #TT SELECT 'a', NULL
INSERT INTO #TT SELECT 'a', NULL
INSERT INTO #TT SELECT 'a', NULL
INSERT INTO #TT SELECT 'a', NULL
INSERT INTO #TT SELECT 'b', NULL
INSERT INTO #TT SELECT 'b', NULL
INSERT INTO #TT SELECT 'b', NULL



INSERT INTO #TD SELECT 'a', 1
INSERT INTO #TD SELECT 'a', 2 
INSERT INTO #TD SELECT 'a', 3
INSERT INTO #TD SELECT 'a', 4
INSERT INTO #TD SELECT 'a', 5
INSERT INTO #TD SELECT 'b', 6
INSERT INTO #TD SELECT 'b', 7
INSERT INTO #TD SELECT 'b', 8


SELECT * FROM #TT


UPDATE T SET LozonExemplarID = LE.ExemplarID 
FROM #TT T
INNER JOIN  #TD LE ON LE.ExemplarName = T.ExemplarName 
WHERE NOT EXISTS (SELECT 1 FROM #TT WHERE #TT.LozonExemplarID =  LE.ExemplarID)


SELECT * FROM #TT


Сообщение было отредактировано: 21 авг 14, 13:18
20 авг 14, 15:28    [16468879]     Ответить | Цитировать Сообщить модератору
 Re: Update дублей разными значениями  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
WITH CTE AS(SELECT N=ROW_NUMBER()OVER(ORDER BY ExemplarName),* FROM #TT)
UPDATE CTE SET LozonExemplarID=N;
20 авг 14, 15:34    [16468935]     Ответить | Цитировать Сообщить модератору
 Re: Update дублей разными значениями  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Немного не точно ответил.
Однако, можно сджойнить два пронумерованных ROW_NUMBER()ом подзапроса по номеру...
20 авг 14, 15:36    [16468957]     Ответить | Цитировать Сообщить модератору
 Re: Update дублей разными значениями  [new]
ScareCrow100500
Member

Откуда:
Сообщений: 3
Благодарю. Работает.
20 авг 14, 15:38    [16468988]     Ответить | Цитировать Сообщить модератору
 Re: Update дублей разными значениями  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
WITH
 T AS(SELECT N=ROW_NUMBER()OVER(PARTITION BY ExemplarName ORDER BY ExemplarName),* FROM #TT)
,T1 AS(SELECT N=ROW_NUMBER()OVER(PARTITION BY ExemplarName ORDER BY ExemplarID),* FROM #TD)
UPDATE T
SET T.LozonExemplarID=T1.ExemplarID
FROM T1
WHERE T.ExemplarName=T1.ExemplarName AND T.N=T1.N;
Не проверял!

P.S. А почему Вы не используете тег SRC? Я глаза сломал.
20 авг 14, 15:43    [16469046]     Ответить | Цитировать Сообщить модератору
 Re: Update дублей разными значениями  [new]
ScareCrow100500
Member

Откуда:
Сообщений: 3
Ещё не научился. Теперь вижу кнопку но отредактировать не могу :)
21 авг 14, 13:17    [16473702]     Ответить | Цитировать Сообщить модератору
 Re: Update дублей разными значениями  [new]
VGalamakh
Member

Откуда: Киев (Альба)
Сообщений: 66
еще есть такой кривоватый способ (при условии, чот значения в 1й колонке отсортированы)

declare @a int=0,
@b varchar(200)=''

update #TT
set LozonExemplarID=@a,@a=case when @b=ExemplarName then @a+1 else 1 end,@b=ExemplarName
21 авг 14, 15:29    [16474852]     Ответить | Цитировать Сообщить модератору
 Re: Update дублей разными значениями  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
VGalamakh
при условии, чот значения в 1й колонке отсортированы
Гарантии этого не может быть в принципе,
ибо в UPDATE нет ORDER BY
21 авг 14, 17:11    [16475620]     Ответить | Цитировать Сообщить модератору
 Re: Update дублей разными значениями  [new]
VGalamakh
Member

Откуда: Киев (Альба)
Сообщений: 66
iap
VGalamakh
при условии, чот значения в 1й колонке отсортированы
Гарантии этого не может быть в принципе,
ибо в UPDATE нет ORDER BY


Да, я знаю)
Но если данные в таблицу заливались уже отсортированными, то работать будет.
22 авг 14, 13:56    [16479941]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить