0

我得到以下结果:

**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的内容更新KLHABTH

应该是这样的:

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

非常感谢!

4

3 回答 3

0
 select * into #temptable from  [SGB] 
  update #temptable t
  set **KLH** =**KL**
  set **ABTH**=**ABT** 
  from [SGB] s  
  inner join s.**SID**=t.**SID**      
于 2013-08-16T20:50:01.753 回答
0
UPDATE B
SET KLH=A.KL,
ABTH=A.ABT
FROM [SGB] A JOIN [SGB]  B ON A.SID=B.SID
于 2013-08-16T20:51:08.270 回答
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

关于 ROW_NUMBER()

但是您没有提到查询如何确定所有重复的行中的第一个(在我按顺序设置的示例中KL

这里SQL Fiddle是一个示例查询,其中包含用于测试的数据

于 2013-08-17T17:22:00.197 回答