我得到以下结果:
**SID** **KL** **ABT** **KLH** **ABTH**
013239 PKB4 GT NULL NULL
013239 TM4A KD NULL NULL
013243 KSB4 GT NULL NULL
013243 TM4A KD NULL NULL
使用此查询:
SELECT DISTINCT
SID, KL, ABT, KLH, ABTH
FROM
[SGB]
WHERE
SID IN (SELECT SID FROM [SGB] GROUP BY SID HAVING COUNT(*) > 1)
我想从第一次 KL 和 ABT 的内容更新 KLH 和 ABTH 重复。
应如下所示:
**SID** **KL** **ABT** **KLH** **ABTH**
013239 PKB4 GT PKB4 GT
013239 TM4A KD PKB4 GT
013243 KSB4 GT KSB4 GT
013243 TM4A KD KSB4 GT
非常感谢!
答案 0 :(得分:0)
select * into #temptable from [SGB]
update #temptable t
set **KLH** =**KL**
set **ABTH**=**ABT**
from [SGB] s
inner join s.**SID**=t.**SID**
答案 1 :(得分:0)
UPDATE B
SET KLH=A.KL,
ABTH=A.ABT
FROM [SGB] A JOIN [SGB] B ON A.SID=B.SID
答案 2 :(得分:0)
以下是使用第一个值更新所有重复的SID
的查询:
;WITH tempSGB AS (
SELECT SID
, KL
, ABT
, KLH
, ABTH
--Next column set numbers in order for rows
, ROW_NUMBER() OVER (PARTITION BY SID ORDER BY KL) AS ROWNUM
FROM SGB
WHERE SID IN (SELECT SID FROM SGB GROUP BY SID HAVING COUNT(*) > 1)
)
UPDATE s SET
s.KLH = tmp.KL
, s.ABTH = tmp.ABT
FROM tempSGB tmp
INNER JOIN SGB s ON s.SID = tmp.SID
WHERE ROWNUM = 1; --here we choose only first row from duplicated
但你没有提到查询如何决定哪一行首先来自所有重复(在我按KL
顺序设置的例子中)
此处SQL Fiddle是包含测试数据的示例查询