我有一个SSIS包,它在后端有存储过程提要。我必须为这个ChannelName派生自动编号逻辑。 我目前的代码是:
IF @p_channelname ='ABCD'
BEGIN
;WITH CTE_AUTONUMBER_PV_AMER AS
(SELECT RECORDSEQ
, 'ABCD'+CAST(@PrevOrderID+DENSE_RANK()OVER(ORDER BY (RECORDSEQ )) AS NVARCHAR(MAX)) AS AUTONUMBER_UPDATE
, AUTONUMBER
FROM IC_CTXS_TRANSACTION_SOURCEFEED TGT
WHERE TGT.[INTERFACE NAME] =@p_interface
AND TGT.[FILENAME]= @p_sourcefilename
AND TGT.CHANNEL = @p_channelname
AND TGT.GEO='America'
) UPDATE CTE_AUTONUMBER_PV_AMER
SET AUTONUMBER = AUTONUMBER_UPDATE
结果是:
Autonumber ProductSKU Quantity
--------- ---------- --------
ABCD123 00001597 42
ABCD124 00001600 42
ABCD125 00001597 35
ABCD126 00001600 35
ABCD127 00001597 39
ABCD128 00001600 39
此处' 123'(@ PrevOrderID)来自之前的文件。
我想得出以下结果:
Autonumber ProductSKU Quantity
--------- ---------- --------
ABCD123 00001597 42
ABCD123 00001600 42
ABCD124 00001597 35
ABCD124 00001600 35
ABCD125 00001597 39
ABCD125 00001600 39
产品SKU:00001597和00001600将是常数值。
如何更改代码才能获得此结果?
TIA:)
答案 0 :(得分:1)
将您的ORDER BY (RECORDSEQ )
更改为ORDER BY (<column with Quantity in your sample>)
答案 1 :(得分:0)
我得到了答案:) 使用row_number而不是Dense_rank:
查询更改
,&#39; ABCD&#39; + CAST(@ PrevOrderID + ROW_NUMBER()OVER(按产品分类订购(RECORDSEQ))AS NVARCHAR(MAX))AS AUTONUMBER_UPDATE