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

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 に答える