Я пытаюсь обновить столбец экспорта во всех строках, которые соответствуют критериям моего предложения WHERE, и вместо этого обновляется все строки
Вот что у меня так далеко
Create table Temp (
Employeeid nvarchar(10),
Punchtype nvarchar (2),
Date Date,
TotalTime decimal (16,2),
Job nvarchar(10),
Exported bit not null Default 0)
Insert Into Temp (Employeeid,Punchtype,Date,TotalTime,Job)
Values ('1234','C','4/24/2017',4,'J1234'), ('1234','RW','4/24/2017',4,'J1234'),('4563','C','4/24/2017',2,'J1234'), ('4563','C','4/24/2017',5,'J1234')
Update temp set exported = 1 where exists ( select null from temp group by employeeid,Date,Job having Min(punchtype) = MAX(punchtype))
0
BrianMichaels
24 Апр 2017 в 23:46
2 ответа
Лучший ответ
Вы можете использовать CTE
и оконные функции:
WITH CTE AS
(
SELECT *,
MIN(punchtype)
OVER(PARTITION BY employeeid, [Date], Job) Min_punchtype,
MAX(punchtype)
OVER(PARTITION BY employeeid, [Date], Job) Max_punchtype
FROM Temp
)
UPDATE CTE
SET exported = 1
WHERE Min_punchtype = Max_punchtype
;
2
Lamak
24 Апр 2017 в 20:49
Попробуйте использовать это обновление:
Update temp set exported = 1 where temp.Employeeid = ( select temp.Employeeid from temp group by employeeid,Date,Job having Min(punchtype) = MAX(punchtype) );
0
Mateus Luiz
24 Апр 2017 в 20:57
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.