[英]Update table from another table with Case Expression
當“statustype”=out 時,我想從“dateattend”列中的“dailydata”表更新“dailydatawh”表中的“statusout”列
UPDATE DAILYDATAWH
SET STATUSOUT=
(SELECT
(case when STATUSTYPE='OUT' then DATEATTEND end)as STATUSOUT
FROM DAILYDATA
GROUP By NIP,NAME,DEPARTMENT,DATEATTEND,STATUSTYPE)
WHERE STATUSOUT = NULL
——
在我嘗試以下答案后
UPDATE DDW
SET STATUSOUT = DD.DATEATTEND
FROM DAILYDATAWH DDW
INNER JOIN DAILYDATA DD ON DDW.NIP = DD.NIP
AND DDW.NAME = DD.NAME
AND DDW.DEPARTMENT = DD.DEPARTMENT
WHERE DD.STATUSTYPE = 'OUT'
這個查詢是有效的,但是當我在表 DAILYDATA 中輸入新數據(NIP、NAME、DEPARTMENT、DATEATTEND、STATUSTYPE)時,'STATUSOUT'(表 DAILYDATAWH)中的新值仍然出現上一個日期
這是查詢的當前輸出:
UPDATE DDW
SET STATUSOUT = DD.DATEATTEND
FROM dailydatawh DDW
INNER JOIN
(
SELECT NIP, NAME, DEPARTMENT, DATEATTEND = MAX(DATEATTEND)
FROM dailydata
WHERE STATUSTYPE = 'OUT'
GROUP BY NIP, NAME, DEPARTMENT
) DD ON DDW.NIP = DD.NIP
AND DDW.NAME = DD.NAME
AND DDW.DEPARTMENT = DD.DEPARTMENT
這是樣本輸入
這是示例輸出
您內部加入表格(這里我假設它基於列NIP
因為未提供實際信息)
UPDATE DDW
SET STATUSOUT = DD.DATEATTEND
FROM dailydatawh DDW
INNER JOIN dailydata DD ON DDW.NIP = DD.NIP
AND DDW.NAME = DD.NAME
AND DDW.DEPARTMENT = DD.DEPARTMENT
WHERE DD.STATUSTYPE = 'OUT'
更新的查詢。
UPDATE DDW
SET STATUSOUT = DD.DATEATTEND
FROM dailydatawh DDW
INNER JOIN
(
SELECT NIP, NAME, DEPARTMENT, DATEATTEND = MAX(DATEATTEND)
FROM dailydata
WHERE STATUSTYPE = 'OUT'
GROUP BY NIP, NAME, DEPARTMENT
) DD ON DDW.NIP = DD.NIP
AND DDW.NAME = DD.NAME
AND DDW.DEPARTMENT = DD.DEPARTMENT
WHERE DDW.STATUSOUT IS NULL
更新的查詢 #2。
UPDATE DDW
SET STATUSOUT = DD.DATEATTEND
FROM dailydatawh DDW
CROSS APPLY
(
SELECT TOP 1 d.DATEATTEND
FROM dailydata d
WHERE d.STATUSTYPE = 'OUT'
AND d.NIP = DDW.NIP
AND d.NAME = DDW.NAME
AND d.DEPARTMENT = DDW.DEPARTMENT
ORDER BY d.ID DESC
) DD
WHERE DDW.STATUSOUT IS NULL
這是將您的插入和更新合並為一個查詢的查詢
; WITH CTE AS
(
SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY NIP, NAME, DEPARTMENT
ORDER BY DATEATTEND)
FROM DAILYDATA
)
INSERT INTO DAILYDATAWH (NIP, NAME, DEPARTMENT, STATUSIN, STATUSOUT)
SELECT NIP, NAME, DEPARTMENT, STATUSIN = MIN(DATEATTEND), STATUSOUT = MAX(DATEATTEND)
FROM CTE
GROUP BY NIP, NAME, DEPARTMENT, (RN - 1) / 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.