Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:使用第一个副本中的数据更新副本_Sql Server - Fatal编程技术网

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)
我想用第一份副本中的KLABT内容更新KLABT

应该是这样的:

**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