我有一张表XX,其中包含以下数据:
REF Part DESC Model
1 6200050 Screw, #10-12 x 1/2" Pan HD UC-24C UC-24CI Cosmetic
2 7006474 Kickplate, Silver Svce UC-24C UC-24CI Cosmetic
3 7002139 Cover, Unit Svce UC-24C UC-24CI Cosmetic
4 6201270 Screw, #8-18 x 5/8" PH PN SS-Gnd UC-24C UC-24CI Cosmetic
6 7016528 Anti Tip Bracket - Svce - 23-7/8" UC-24C UC-24CI Cosmetic
7 6200780 Screw, #10-24 x 1/2" PH Hex Washer UC-24C UC-24CI Cosmetic
我需要做的是在字段中的两个模型编号之间拆分模型字段,为每个模型编号创建一个新记录,所有其他数据都相同,并保留扩展数据(“Cosmetic”一词) )在每条记录的模型字段中。
答案 0 :(得分:1)
此解决方案仅在Model
值具有以下模式Model1_Model2_SomethingElse
时才有效,其中_ =空格(分隔符)且模型[1 | 2]不包含空格:
SELECT ..., ca.Value
FROM dbo.MyTable t
CROSS APPLY
(
SELECT unpvt.ColumnValue + N' ' + unpvt.ExtendedData AS Value
FROM (
SELECT LEFT(t.Model, a.Idx1 - 1) AS Model1,
SUBSTRING(t.Model, a.Idx1 + 1, b.Idx2 - a.Idx1 - 1) AS Model2,
SUBSTRING(t.Model, b.Idx2 + 1, 4000) AS ExtendedData
FROM (VALUES (CHARINDEX(' ', t.Model))) AS a(Idx1)
CROSS APPLY (VALUES (CHARINDEX(' ', t.Model, a.Idx1+1))) AS b(Idx2)
) src UNPIVOT( ColumnValue FOR ColumnType IN ([Model1], [Model2]) ) unpvt
) ca
答案 1 :(得分:1)
这里有一小段SQL会破坏你的“型号”。你或许可以将它作为程序的一部分来做你想要做的事情......
declare @s varchar(255)
declare @m1 varchar(255)
declare @m2 varchar(255)
declare @p varchar(255)
set @s = 'UC-24C UC-24CI Cosmetic'
SET @m1 = SUBSTRING(@s, 0, CHARINDEX(' ',@s))
SET @s = LTRIM(RTRIM(SUBSTRING(@s, LEN(@m1 + ' ') + 1, LEN(@s))))
SET @m2 = SUBSTRING(@s, 0, CHARINDEX(' ',@s))
SET @p = LTRIM(RTRIM(SUBSTRING(@s, LEN(@m2 + ' ') + 1, LEN(@s))))
SET @m1 = @m1 + ' ' + @p
SET @m2 = @m2 + ' ' + @p
select @m1,@m2
结果如下:
UC-24C Cosmetic UC-24CI Cosmetic
答案 2 :(得分:0)
以下SQL Fiddle示例演示了如何通过以下方式完成此操作:
INSERT INTO XXX (Ref, Part, Description, Model)
SELECT Ref, Part, Description,
Left(Model,CHARINDEX(' ', Model))
+ Right(Model,Len(Model)-CHARINDEX(' ', Model, CHARINDEX(' ', Model) +1))
FROM XXX;
UPDATE XXX SET
Model = Right(Model,Len(Model)-CHARINDEX(' ', Model))
WHERE CHARINDEX(' ', Model, CHARINDEX(' ', Model) +1)<>0
如果您的Ref
字段是自动主键,则只需在INSERT语句中不包含该字段。