169 похожих чатов

Добрый день, подскажите пожалуйста, можно ли использую функцию MERGE, в

разделе update обновлять все строчки?

В данный момент есть ключ, к примеру имя. Но имя расшивается в таблице на 3 строчки, так нужно.

Когда делаю MERGE, указываю ключ только имя и пытаюсь update, но выходит ошибка, не понимает какую строчку обновлять

16 ответов

43 просмотра

Ключ обычно соответствует одной "строчке"

Руслан- Автор вопроса
Roman Sergeev
Ключ обычно соответствует одной "строчке"

Но в моем примере, их несколько, могу более подробно рассказать какую задачу пытаюсь решить

Руслан
Но в моем примере, их несколько, могу более подроб...

Значит это не ключ Напишите ddl, образец данных и что пытаетесь получить

Руслан- Автор вопроса
Roman Sergeev
Значит это не ключ Напишите ddl, образец данных и ...

--создание таблиц CREATE TABLE [ruslanrarr].[dbo].[zp_testt] ( rec_date nvarchar(50), end_date nvarchar(50), name VARCHAR(255) NOT NULL, vid_nadbavki nvarchar(255) null, summa float ) INSERT INTO [ruslanrarr].[dbo].[zp_testt](rec_date,end_date,name,vid_nadbavki,summa) VALUES('01.01.2023','05.05.2023','руслан','оклад',000), ('01.01.2023','05.05.2023','руслан','проф мастерство',000), ('01.01.2023','05.05.2023','руслан','питание',000) CREATE TABLE [ruslanrarr].[dbo].[zp_fact]( rec_date nvarchar(50), end_date nvarchar(50), name VARCHAR(255) NOT NULL, vid_nadbavki nvarchar(255) null, summa float ) INSERT INTO [ruslanrarr].[dbo].[zp_fact](rec_date, end_date,name,vid_nadbavki,summa) VALUES('06.05.2023','12.12.2023','руслан','оклад',500), ('06.05.2023','12.12.2023','руслан','проф мастерство',400), ('06.05.2023','12.12.2023','руслан','питание',300) ---MERGE MERGE [ruslanrarr].[dbo].[zp_fact] t USING [Ruslanrarr].[dbo].[zp_testt] s ON s.name = t.name WHEN MATCHED THEN UPDATE SET t.name = 'ЗАКРЫТО' WHEN NOT MATCHED BY TARGET THEN INSERT (rec_date,end_date,name,vid_nadbavki,summa) VALUES (s.rec_date,s.end_date,s.name,s.vid_nadbavki,s.summa);

Руслан- Автор вопроса
Timus
И чего ты хочешь добиться?

Хочу, что бы все строчки в таблице факт , по ключу «имя» обновились, но выходит ошибка, так как ключ не уникальный

Для merge вы должны указать в "On" критерий, по которому однозначно бужет интерпритироваться только одна строка

Руслан- Автор вопроса
Руслан
А можно ли как то группу строк?

Если вы хотите использовать merge, то нельзя. Делайте delete insert

Руслан- Автор вопроса
Руслан- Автор вопроса
Aleksey Shamshur
Если вы хотите использовать merge, то нельзя. Дела...

Смысл в том, что есть таблица где данные о сотрудниках на каждый день, к примеру: ФИО, дата, пол, возраст, отдел, должность, и другие поля. И данные каждый день, они могут повторятся. Но данные на каждый день по сотруднику уникальны. Ключ конечно там составной из ФИО, табельного, и других гуидов. Есть таблица с зарплатой сотрудников. Где данные к примеру, ФИО, дата начала, дата окончания, вид надбавки, сумма надбавки. И здесь как правильно по одному человеку 4 строчки может быть, разные надбавки, и дата начала и дата окончания надбавки может тоже одинаково. Я хочу ID из таблицы зарплаты , добавить в таблицу сотрудников, которые на каждый день, что бы в дальнейшем связывать по ID, но когда добавлю, таблица первая разошьетсч на большое количество строк, из за того что в таблице зарплата много строк. Вот и подумал, что через merge буду грузить и добавлять новые столбцы дата начала и дата окончания для целой группы, и id проставлю для каждый группы и тогда повторов не будет

Руслан
Смысл в том, что есть таблица где данные о сотрудн...

Сделайте группировку, чтобы гарантировать уникальность по ключу в "on" merge tbl_target as t using ( select s.staff_id,max(s.attr_value) as attr_value from tbl_source s group by s.staff_id ) as s on s.staff_id=t.staff_id ...

Руслан- Автор вопроса
Руслан- Автор вопроса
Aleksey Shamshur
да

А группировать прямо в ON где условие?

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
9
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта