原表內容如圖:

現想實作:
如果第一列某兩行值相同,且第三列某兩行值均為y,則將這兩行中,一行的第三列值改為n,其他數不發生變化,即為下圖結果;

請問大佬們用sql如何實作?非常感謝!
uj5u.com熱心網友回復:
CREATE TABLE #a(姓名 VARCHAR(20),年級班級 VARCHAR(20),是否滿分 VARCHAR(10))
INSERT INTO #a
SELECT '小王','0101','y' UNION ALL
SELECT '小李','0101','n' UNION ALL
SELECT '小張','0101','n' UNION ALL
SELECT '小王','0201','y' UNION ALL
SELECT '小李','0201','n' UNION ALL
SELECT '小張','0201','y'
UPDATE
t1
SET t1.[是否滿分] = 'n'
FROM (SELECT row_number() OVER (ORDER BY [姓名]) n,* FROM #a) t1 ,
(SELECT row_number() OVER (ORDER BY [姓名]) n,* FROM #a) t2
WHERE t1.[姓名] = t2.[姓名] AND t1.[是否滿分] = 'y' AND t2.[是否滿分] = 'y'
AND t1.n > t2.n
uj5u.com熱心網友回復:
手動的話 樓上的方式,自動的話加個回圈uj5u.com熱心網友回復:
樓上已經是自動化的方式啦,不用再加回圈了;
不過可以優化一下,直接按照“兩列”磁區,n不是1的就直接Update就可以了;
優化后的代碼如下:
with t1 as(
SELECT row_number() OVER (partition by 姓名,是否滿分 ORDER BY [年級班級]) n,* FROM #a1
where 是否滿分='y'
)
UPDATE t1 SET t1.[是否滿分] = 'n' WHERE t1.n>1
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/22761.html
標籤:基礎類
上一篇:資料挖掘篇——特征工程之特征降維
下一篇:sql資料 觸發器問題
