Sql server SQL Server:使用第一个副本中的数据更新副本
我得到以下结果:Sql server SQL Server:使用第一个副本中的数据更新副本,sql-server,Sql Server,我得到以下结果: **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
**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内容更新KL和ABT
应该是这样的:
**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
非常感谢 这里是一个查询,它用第一个值更新所有重复的
SID
:
select * into #temptable from [SGB]
update #temptable t
set **KLH** =**KL**
set **ABTH**=**ABT**
from [SGB] s
inner join s.**SID**=t.**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
的顺序设置)
下面是一个示例查询,其中包含用于测试的数据向我们展示您的努力!你有什么?你被卡在哪里?你如何知道哪个重复记录是用来更新所有重复记录的两列的记录?你确定这个答案吗?你能解释一下你在这个查询中想做什么吗。
;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