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

Откуда: London
Сообщений: 2712
Заметил где-то на предыдущих ветках совет применить merge (кажется начиная с SQL Server 2012)..
кто нибудь может на примере объяснить как использовать merge для такой постановки?
исходный код
declare @r1 table(nm varchar(6),vol int)insert into @r1 values('tst1',5),('tst2',8)
declare @r2 table(nm varchar(6),vol int)insert into @r2 values('tst1',1),('tst3',2)
declare @r3 table(nm varchar(6),vol int)insert into @r3 select*from @r1 union all select*from @r2
declare @r4 table(nm varchar(6),vol int)insert into @r4 select distinct nm,sum(vol)over(partition by nm)vol from(select*from @r1 union all select*from @r2)x
declare @r5 table(nm varchar(6),vol int)insert into @r5 values('tst1',1),('tst3',2)
select*from @r1 select*from @r2 select*from @r3 select*from @r4 select*from @r5
таблица @r1 - исходные данные 1
таблица @r2 - исходные данные 1
тавлица @r3 - комбинированные данные из таблиц @r1 и @r2
таблица @r4 - желаемый результат: сумма по именам из таблиц @r1 и @r2
таблица @r5 - должен появится результат слияния: сумма по именам из таблиц @r1 и @r5 где таблица @r5 является сначала источником данных - а потом приёмником данных, т.е. при помощи merge нужно добиться результата как в таблице @r4

Фактически нужно взять данные из @r1 @r5 и объединить это в той-же @r5
Читал их хэлп с примерами - но от разнообразия опций чего-то совсем клинит под вечер, в общем их примеры/описания не помогают врубиться :(
(у мну SQL Server 2014 Express)
спсб.
21 май 14, 20:47    [16051371]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Постановки задачи жесть, как в анекдоте:
- Василиваныч, а почему в ваших командирских часах восемь стрелок?
- А четыре из них, Петька, для дезориентации противника!

- @r2 и @r5 это не копии это одна и та же сущность
- @r3 не используется, но должна показать императивное мышление ТС (и только)
- distinct + over: Бардак не в клозетах в головах ©
- Главное не уточнено, что "nm" логический ключ.
- Вопрос топорный как пробка. Писать ответ, это не помочь человеку понять простоту merge, а скорее полностью отбить желание понять элементарный SQL.
vikkiv
но от разнообразия опций чего-то совсем клинит под вечер
Нет там опций.
Не читайте советских газет мануалы по вечерам.
vikkiv
в общем их примеры/описания не помогают врубиться
Мне вас жаль.
22 май 14, 10:05    [16052717]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а merge тут каким боком вообще ? Выб вот ето в лоб не переводилиб название операторов языка
22 май 14, 11:26    [16053394]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
Mnior
..Мне вас жаль.
На вот это
Но хуже всего то, чего они не делают. Не задают вопросов. Не записывают.
У нас вот это
Заметил где-то на предыдущих ветках совет применить merge (кажется начиная с SQL Server 2012)..
кто нибудь может на примере объяснить как использовать merge для такой постановки?

Не исправляют тесты, .. Разве их не волнуют их неудачи в учебе?
- Тоже что и выше - познания ради или любопытства и спрашиваю,
Вопрос топорный как пробка. Писать ответ, это не помочь человеку понять простоту merge, а скорее полностью отбить желание понять элементарный SQL.
Так и прошу "понять ту самую простоту" на примере.. а насчёт элементарного SQL - исходный код выше полностью мой (и SQLa + Microsofta или кто там в разработке ядра был..) .. кстати "ошибка" {а-ля исправление теста} с distinct vs over замечена ..
Это к тому что ссылка зачётная - и под утро настроение поднимает - но явно большая часть не ко мне...нечо воду мутить.
Буквально кто-то несколькими постами ниже merge упомянул - я и заинтересовался.
Заранее спасибо за примеры в пределах контекста.. (если таковые будут).
22 май 14, 12:35    [16054039]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
Glory
Member

Откуда:
Сообщений: 104760
vikkiv
Заметил где-то на предыдущих ветках совет применить merge (кажется начиная с SQL Server 2012)..
кто нибудь может на примере объяснить как использовать merge для такой постановки?

А почему вы решили, что в данной постановке merge применим ?
22 май 14, 12:36    [16054057]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
Glory, да, справедливое замечание как уже указывалось by Maxx
предположил что возможно по косвенной информации из непроверенного источника
https://www.sql.ru/forum/1095910/kak-importirovat-s-usloviem
пошел ещё раз читать мануал по merge поподробней, т.к. судя по тренду ответов вполне вероятно что ником боком.
22 май 14, 13:29    [16054623]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
serpentariy
Member

Откуда:
Сообщений: 265
vikkiv,
merge @r5 as t
using @r1 as s on s.nm = t.nm
when matched then update set vol += s.vol
when not matched then insert (nm, vol) values (s.nm, s.vol);
22 май 14, 13:31    [16054649]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
Glory
Member

Откуда:
Сообщений: 104760
vikkiv
предположил что возможно по косвенной информации из непроверенного источника
https://www.sql.ru/forum/1095910/kak-importirovat-s-usloviem

В ссылке, как раз merge. Потому там два действия " при совпадении значений полей name и surname value суммировалось. В противном случае добавляется новая строка."
А вашем примере - фиг знает что
22 май 14, 13:34    [16054676]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
Mnior
distinct + over: Бардак не в клозетах в головах ©
Ну хорошо, твой вариант каков? Без distinct (явно не устраивает)? Или без оver но с group by (каменный век)?
22 май 14, 13:36    [16054698]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
Glory - Читаем задание и пример, исходные таблицы @r1 и @r5 , результат слияния в @r5 .. не вижу принципиальной разницы с изначальным постом. Minor уже нагородил - теперь и частично другие дальше в том-же духе сходить с рельс будут?
22 май 14, 13:42    [16054757]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
Glory
Member

Откуда:
Сообщений: 104760
vikkiv
Glory - Читаем задание и пример, исходные таблицы @r1 и @r5

А нафига там еще про @r2, @r3 и @r4 ?
Для тренировки внимания что ли ?
22 май 14, 13:44    [16054778]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
Glory, ну да, может немного нагорожено, @r3 просто консолидирующая таблица из @r1 и @r2, а @r4 (из @r1 и @r2) пример ожидаемого результата во внешнюю таблицу (не слиянием в одну из исходных).. приведено больше как раз для объяснения желаемого результата и возможных вариаций понимания (на разное восприятие).
напрямую будет: из @r1 и @r5 в @r5
22 май 14, 14:01    [16054984]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
vikkiv
Mnior
distinct + over: Бардак не в клозетах в головах ©
Ну хорошо, твой вариант каков? Без distinct (явно не устраивает)? Или без оver но с group by (каменный век)?


подавился чаем. вы хотели вот это:
select nm, sum(vol) from ... group by nm

но написали это вот так:
select distinct nm,sum(vol)over(partition by nm)vol

потому что group by "каменный век"?
ахренеть.
22 май 14, 14:19    [16055146]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
daw, попробуй по бигдатовски, на 10+ миллионов строк и посмотри на тайминги если nm индексирована, у меня почему-то расхождение было по времени на порядки, сейчас проверю ешё раз, отпишусь на обеде..
22 май 14, 14:22    [16055177]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
serpentariy - Спасибо огромущее, вопрос решен.
22 май 14, 14:27    [16055221]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
daw, нда, разница на порядки есть, но в пользу group by , facepalm =)
22 май 14, 14:36    [16055318]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
vikkiv
Тоже что и выше - познания ради или любопытства и спрашиваю,
Вы себе не врите.
Познание это когда познаёшь мир сам, когда хочешь научится самому видеть смысл вещей. Пересоздавать окружающий мир.
Но это точно не спрашивать других "объясни мне эту элементарную вещь", в стиле общих несвязанных с контекстом общего познания вопросов. Словно от вас зевотой тянет. Мол решите за меня.
Да, вот так вот и выглядит.

vikkiv
Так и прошу "понять ту самую простоту" на примере..
vikkiv
...их примеры/описания не помогают врубиться :(
Вот что-что, но именно примеры, которые к счастью в msdn встречаются как раз помогают понять что либо с полпинка. Без всякой простыни объяснений для чайников.

Что тут непонятно, конкретно?
vikkiv
но явно большая часть не ко мне...
Выглядит именно так.
Если человек прибегает к помощи в понимании, значит у него скорее нехилые проблемы в этом деле. (Когда информация есть, доступна и даже как-то разжёвана, структурирована)
22 май 14, 14:48    [16055446]     Ответить | Цитировать Сообщить модератору
 Re: Использование merge  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
vikkiv
serpentariy - Спасибо огромущее, вопрос решен.
Именно, не "стало понятно", а "проблема решена".
Не надо людей обманывать, это нелепо, всё лежит не поверхности и донельзя очевидно.
22 май 14, 14:50    [16055466]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить