我在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
答案 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
替换位置列中空字符串的空格,您还可以使用REPLACE
和LTRIM
:
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;