Я пытаюсь обновить столбец экспорта во всех строках, которые соответствуют критериям моего предложения 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