我被一个奇怪的问题困住了。我有一张桌子,基本上可以归结为:
CREATE TABLE #Sample (ColA VARCHAR (20), ColB VARCHAR (20), ColC VARCHAR (20), ColD VARCHAR (10), ColE VARCHAR (10) )
INSERT INTO #Sample VALUES ('6250', '1001', '12AA', '12AA', ''),
('6250', '1002', '12AA', '12AA', ''),
('6251', '1003', '12BB', '12BB', 'A'),
('6252', '1004', '12CC', '12CC', '')
我已收到一份装运订单的规格。对于ColB的每个值,我必须重复以下步骤,以便创建一个输出列。前两行是文本,第二行和第三行是前缀+B列和C列的值。作为奖励,只有当科尔被填补,我们必须选择一个前缀加科尔。
这听起来可能很混乱,因此我将添加所需的输出:
'A1 Text'
'A2 Text'
'ZZ62501001' -- ZZ prefix + ColA + ColB
'ZZ12AA' -- ZZ prefix + ColC
'A1 Text'
'A2 Text'
'ZZ62501002' -- ZZ prefix + ColA + ColB
'ZZ12AA' -- ZZ prefix + ColC
'A1 Text'
'A2 Text'
'ZZ62511003' -- ZZ prefix + ColA + ColB
'ZZA' -- ZZ prefix + ColE (notice that this is only shown when ColE is filled)
'ZZ12BB' -- ZZ prefix + ColC
'A1 Text'
'A2 Text'
'ZZ62521004' -- ZZ prefix + ColA + ColB
'ZZ12CC' -- ZZ prefix + ColC
这种安排有很多错误,但我对这件事没有影响。所以我被手头的问题困住了。
我的尝试是先创建一个“常规”输出表,然后尝试创建一个包含一列的新表。
我的代码尝试,这是相当糟糕的,但我将包括它无论如何:
CREATE TABLE #Output ( ColA VARCHAR (100),
ColB VARCHAR (100),
ColC VARCHAR (100),
ColD VARCHAR (100),
ColE VARCHAR (100) )
DECLARE @Counter INT
SET @Counter = 1
WHILE @Counter < ( SELECT MAX (RowNumb) FROM #Sample )
BEGIN
INSERT INTO #Output
SELECT 'A1 Text',
'A2 Text',
'ZZ' + ColA + ColB, -- ZZ prefix + ColA + ColB
'ZZ' + ColC,
'ZZ' + ColE
FROM #Sample
SET @Counter = @Counter + 1
END
SELECT * FROM #Output
性能在这里不是一个真正的问题,处理几千行,所以游标或循环不是问题。