我有下表:
EventID=00002,DocumentID=0005,EventDesc=ItemsReceived
我在另一个表中有数量
DocumentID=0005,Qty=20
我想用自动生成的列生成20行的结果(取决于数量),该列的序列为:
ITEM_TAG_001,
ITEM_TAG_002,
ITEM_TAG_003,
ITEM_TAG_004,
..
ITEM_TAG_020
答案 0 :(得分:1)
这是您的SQL查询。
<codemirror ref="myCm"
:value="code"
:options="cmOptions"
@ready="onCmReady"
@focus="onCmFocus"
@input="onCmCodeChange">
</codemirror>
输出:
答案 1 :(得分:1)
最好是引入一个数字表,在很多地方都很漂亮...
发生的事情:
创建一些测试数据:
DECLARE @MockNumbers TABLE(Number BIGINT);
DECLARE @YourTable1 TABLE(DocumentID INT,ItemTag VARCHAR(100),SomeText VARCHAR(100));
DECLARE @YourTable2 TABLE(DocumentID INT, Qty INT);
INSERT INTO @MockNumbers SELECT TOP 100 ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) FROM master..spt_values;
INSERT INTO @YourTable1 VALUES(1,'FirstItem','qty 5'),(2,'SecondItem','qty 7');
INSERT INTO @YourTable2 VALUES(1,5), (2,7);
-查询
SELECT CONCAT(t1.ItemTag,'_',REPLACE(STR(A.Number,3),' ','0'))
FROM @YourTable1 t1
INNER JOIN @YourTable2 t2 ON t1.DocumentID=t2.DocumentID
CROSS APPLY(SELECT Number FROM @MockNumbers WHERE Number BETWEEN 1 AND t2.Qty) A;
结果
FirstItem_001
FirstItem_002
[...]
FirstItem_005
SecondItem_001
SecondItem_002
[...]
SecondItem_007
简而言之:
我们使用INNER JOIN
来获取加入该项目的数量。
现在,我们使用APPLY
(这是一个 row-wise 操作)将任意数量的行绑定到集合。
第一项将返回5行,第二项将返回7行。STR()
和REPLACE()
的技巧是创建填充数字的一种方法。您可能会使用FORMAT()
(v2012 +),但运行速度很慢...
表@MockNumbers
是一个声明的表变量,其中包含从1到100的数字列表。This answer提供了如何创建物理数字和日期表的示例。任何数据库都应该有这样的表...
如果您不想创建数字表,则可以搜索理货价格表或即时搜索理货价格。有很多答案显示了如何创建连续数字列表的方法... a