Использование нескольких данных из запроса SQL UPDATE - PullRequest
0 голосов
/ 25 сентября 2019

Я записываю данные во временную таблицу, используя запрос ниже.Для этого я использую команду обновления.Однако в некоторые дни значения в таблице могут быть больше одного, и в этом случае мой запрос на обновление выбирает первое значение.Как мне заставить его выбрать самое большое, когда приходит несколько значений?Я использовал команду MAX и CROSS JOIN, но получил неправильные значения. таблица personel_giriscikis

declare @kartno nvarchar(50);
declare @ilktarih datetime;
declare @sontarih datetime;
declare @devamsizliktablo TABLE(
Tarih datetime,
Giris time,
Cikis time,
Gun nvarchar(50),
Durumu nvarchar(50),
Hesap float,
Vardiya nvarchar(50),
Vardiyagsaat time,
Vardiyacsaat time,
Gecgelme float,
Erkencikma float)

UPDATE @devamsizliktablo SET Giris=p.cikis_saat 
FROM dbo.personel_giriscikis AS p 
LEFT OUTER JOIN dbo.personel_kartlari AS pk ON pk.id=p.personel_id 
LEFT OUTER JOIN dbo.Takvim AS t ON t.tarih=p.tarih
LEFT OUTER JOIN @devamsizliktablo AS d ON d.Tarih=p.tarih
WHERE p.tarih>=@ilktarih AND p.tarih<=@sontarih AND pk.kartno=@kartno AND d.Tarih=p.tarih

1 Ответ

0 голосов
/ 25 сентября 2019

Прежде всего, вам не нужно использовать левое соединение.Вы можете использовать GROUP BY, чтобы найти максимальное значение, а затем выполнить обновление:

;WITH cte_max(Tarih,cikis_saat)
AS
(
  SELECT d.Tarih, MAX(p.cikis_saat) AS cikis_saat
  FROM dbo.personel_giriscikis AS p 
  INNER JOIN dbo.personel_kartlari AS pk ON pk.id=p.personel_id 
  INNER JOIN dbo.Takvim AS t ON t.tarih=p.tarih
  INNER JOIN @devamsizliktablo AS d ON d.Tarih=p.tarih
  WHERE p.tarih>=@ilktarih AND p.tarih<=@sontarih AND pk.kartno=@kartno
  GROUP BY d.Tarih 
)
UPDATE d
SET d.Giris=m.cikis_saat 
FROM @devamsizliktablo d
INNER JOIN cte_max m
ON m.Tarih=d.Tarih;
...