重复 SQL 查询并创建一个输出列



我被一个奇怪的问题困住了,这个问题正在杀死我。我有一张桌子,基本上可以归结为:

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 列中的值。作为奖励,只有当 ColE 被填充时,我们才必须选择一个前缀加上 ColE。

这听起来可能令人困惑,因此我将添加所需的输出:

'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

如果有人可以解决我遇到的这个奇怪的问题并创建所需的输出,我将不胜感激。

性能在这里不是一个真正的问题,处理几千行,所以游标或循环不是问题。

使用交叉应用,您可以每行构建多行:

declare @Sample table (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', '')

select a.results
from @Sample
cross apply (values ('A1 Text')
,('A2 Text')
,('ZZ' + ColA + ColB)
,('ZZ' + ColC)
,('ZZ' + ColE)
) a(results)
where a.results != 'ZZ'

结果:

results
A1 Text
A2 Text
ZZ62501001
ZZ12AA
A1 Text
A2 Text
ZZ62501002
ZZ12AA
A1 Text
A2 Text
ZZ62511003
ZZ12BB
A1 Text
A2 Text
ZZ62521004
ZZ12CC

相关内容

最新更新