根据SQL中另一列的值派生自动编号

时间:2016-06-16 12:21:22

标签: sql sql-server autonumber dense-rank

我有一个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:)

2 个答案:

答案 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