表格1
| ID | 代碼 | 決定 |
|---|---|---|
| 1 | TK01 | 是的 |
| 2 | OP01 | --- |
| 3 | TK01 | --- |
| 4 | MK02 | 是的 |
| 5 | MK02 | --- |
嗨,伙計們,如果在代碼列中發現重復,什么 SQL 查詢會更新決策列。
換句話說:代碼為TK01 的ID 1具有“是”,因此 ID 3 應在“決策”列中更新為“是”值。
與 ID 5 相同,因為它與 ID 4 的代碼相匹配,并且 ID 4 在Decision列中具有“是”值。
我已經在 Access(下面的代碼)中創建了它,但是如何在 t-sql 或 mysql 中做到這一點,請
UPDATE Table1 t1 INNER JOIN Table1 t2
ON t1.Code = t2.Code
SET t1.Decision = t2.Decision
uj5u.com熱心網友回復:
在 T-SQL 中,我會使用可更新的 CTE來做到這一點。使用分析函式,獲得正確的決策值并識別重復的代碼,然后只更新那些重復的代碼:
with u as (
select *,
Max(decision) over(partition by code) v,
Count(*) over(partition by code) cnt
from t
)
update u
set decision = v
where cnt > 1 and decision = '---'
uj5u.com熱心網友回復:
tsql:
UPDATE t1 SET t1.Decision = 'Yes' FROM Table1 t1 INNER JOIN Table1 t2 ON t1.Code = t2.Code
WHERE t1.Decision <> t2.Decision
您可以通過在塊中添加 UPDATE 陳述句來查看預期結果而不執行它
BEGIN TRAN
SELECT * FROM Table1
UPDATE t1 SET t1.Decision = 1 FROM Table1 t1
INNER JOIN Table1 t2 ON t1.Code = t2.Code
WHERE t1.Decision <> t2.Decision
SELECT * FROM Table1
ROLLBACK TRAN
uj5u.com熱心網友回復:
這應該有效:
UPDATE a
SET decision = 'Yes'
FROM table1 AS a
INNER JOIN table1 AS b
ON a.code = b.code
AND (a.decision = 'Yes' OR b.decision = 'Yes');
不過,您應該規范化您的表格。如果決策僅取決于代碼,則應考慮將決策列移至新表,這樣您將有兩個表U(ID, Code)和V(Code, Decision).
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389980.html
