2017-02-01 6 views
1

SQL Server 2012には、部品のリスト、部品の位置、および数量を把握したテーブルがあります。私が持っている問題は、誰かがデータベースに追加したときに、場所の前にスペースを置くことです。これにより、2つのレコードが可能になりました。SQL Serverで重複するレコードを結合する

場所の前にスペースがある部分を見つけて、場所の前にスペースを入れずに同じ部分に追加するジョブを作成する必要があります。私はこれでどこから始めるのかについてはあまりよく分かりません。

これは前です:これは、ジョブが走った後に私が持っているしたいものです

Partno | PartRev | Location | OnHand | Identity_Column 
-------------------------------------------------------------------- 
    0D6591D 000   MV3   55.000  103939 
    0D6591D 000   MV3   -55.000 104618 

Partno | PartRev | Location | OnHand | Identity_Column 
-------------------------------------------------------------------- 
    0D6591D 000   MV3   0   104618 
+0

単なる空白ですか?それは単なる空白だけではありません –

+0

「後」の行のIdentity_Column値は間違いですか?スペースを持たない行を維持している場合、何か他のことが起こっていない限り、104618になるはずです... –

+0

Chrisは間違いでした –

答えて

2

2つのステップ:1.更新レコードを私はあなたにもLTRIMRTRIMを使用することができ、位置列に空の文字列にスペースを置き換えるためにREPLACEを使用しました正しい場所、2.間違った場所のレコードを削除する。

update mytable 
set onhand = onhand + 
(
    select coalesce(sum(wrong.onhand), 0) 
    from mytable wrong 
    where wrong.location like ' %' 
    and trim(wrong.location) = mytable.location 
) 
where location not like ' %'; 

delete from mytable where location like ' %'; 
+0

私はそれを試み、私は重複キーエラーを持っています。 –

+0

重複キーですか?データを挿入するのではなく、キーを更新していない、レコードを削除するだけです。どうやってこのようなエラーを得ることができますか? –

+0

それに応じて、 'ltrim'または' rtrim'を使って 'trim'を変更したいだけかもしれません。 – Stephen

1

あなたは、レコードを識別するためにHAVING句でいくつかのグループ分けを行うことができます。

CREATE TABLE #Sample 
    (
     [Partno] VARCHAR(7) , 
     [PartRev] INT , 
     [Location] VARCHAR(5) , 
     [OnHand] INT , 
     [Identity_Column] INT 
    ); 


INSERT INTO #Sample 
    ([Partno], [PartRev], [Location], [OnHand], [Identity_Column]) 
VALUES 
    ('0D6591D', 000, ' MV3', 55.000, 103939), 
    ('0D6591D', 000, 'MV3', -55.000, 104618) 
; 

SELECT Partno , 
     PartRev , 
     REPLACE(Location, ' ', '') Location, 
     SUM(OnHand) [OnHand] 
FROM #Sample 
GROUP BY REPLACE(Location, ' ', '') , 
     Partno , 
     PartRev 
HAVING COUNT(Identity_Column) > 1; 

DROP TABLE #Sample; 

が生成されます:

Partno PartRev Location OnHand 
0D6591D 0  MV3   0 
+0

私の最大の問題は、悪い記録を見つけて、一致する良い記録を見つけることだと思います。 –

関連する問題