在SQL Server中组合重复记录

时间:2017-02-01 15:55:02

标签: sql sql-server sql-server-2012

我在SQL Server 2012中有一个表,其中包含部件列表,部件位置和库存数量。我遇到的问题是有人在将数据添加到数据库时在该位置前放置了一个空格。这允许有两个记录。

我需要创建一个作业,在该位置之前找到带空格的部分,并将这些部分添加到相同的部分,而不在该位置前面留出空格。我不太确定从哪里开始。

这是之前的:

  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

2 个答案:

答案 0 :(得分:2)

两个步骤:1。使用正确的位置更新记录,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 ' %';

答案 1 :(得分:1)

您可以使用HAVING子句进行一些分组以识别记录。我已使用sudo ln -f -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib替换位置列中空字符串的空格,您还可以使用REPLACELTRIM

RTRIM

产地:

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;