2016-06-13 81 views
-2

集團這是我的樣本數據:SQL服務器 - 通過邏輯

Autonumber ProductSKU Quantity 
--------- ---------- -------- 
ABCD123  00001597  42 
ABCD123  00001600  42 
ABCD124  00001597  35 
ABCD124  00001600  35 
ABCD125  00001597  39 
ABCD125  00001600  39 

我不得不得出基礎上,QuantityProductSKUAutonumber列值。當Quantity & ProductSKU變化時,Autonumber應該改變。 我該如何做到這一點?我有邏輯增加Autonumber,但與邏輯組混淆。請好心幫助我。


EDIT(從OP在答案部分交複製)

我有計算自動編號,其被遞增爲每一行的邏輯。

查詢:

IF @p_channelname ='ABCD' 
    BEGIN 
      ;WITH CTE_AUTONUMBER_ABCD_AMER AS 
        (SELECT RECORDSEQ 
          ,'ABCD'+CAST(@PrevOrderID+DENSE_RANK()OVER(ORDER BY (RECORDSEQ)) AS NVARCHAR(MAX)) AS AUTONUMBER_UPDATE 
          , AUTONUMBER 
          , LINENUMBER 
       , DENSE_RANK()OVER(ORDER BY (RECORDSEQ)) AS LINENUMBER_UPDATE 
        FROM TABLE1 TGT 
        WHERE TGT.[INTERFACE NAME] [email protected]_interface 
             AND TGT.[FILENAME]= @p_sourcefilename 
              AND TGT.CHANNEL = @p_channelname 
              AND TGT.GEO='America' 
        ) UPDATE CTE_AUTONUMBER_ABCD_AMER 
          SET AUTONUMBER = AUTONUMBER_UPDATE, 
       LINENUMBER=LINENUMBER_UPDATE 

目前自動編號值是:

Autonumber ProductSKU Quantity 
--------- ---------- -------- 
ABCD123  00001597  42 
ABCD124  00001600  42 
ABCD125  00001597  35 
ABCD126  00001600  35 
ABCD127  00001597  39 
ABCD128  00001600  39 

我想生成自動編號值:

Autonumber ProductSKU Quantity 
--------- ---------- -------- 
ABCD123  00001597  42 
ABCD123  00001600  42 
ABCD124  00001597  35 
ABCD124  00001600  35 
ABCD125  00001597  39 
ABCD125  00001600  39 

這是當前查詢: ; WITH CTE_AUTONUMBER_EP IC_AMER AS (SELECT RECORDSEQ ,CASE WHEN @P_CHANNELNAME ='Epic的 THEN'Epic的+ CAST(CAST(自動編號AS INT)AS NVARCHAR(MAX))
END AS AUTONUMBER_UPDATE ,自動編號 ,LINENUMBER ,DENSE_RANK ()OVER(ORDER BY(RECORDSEQ))AS LINENUMBER_UPDATE 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 ='美國' AND ISNUMERIC(CAST(AUTONUMBER AS INT))= 1 和自動編號IS NOT NULL )UPDATE CTE_AUTONUMBER_EPIC_AMER SET自動編號= AUTONUMBER_UPDATE, LINENUMBER = LINENUMBER_UPDATE

我怎麼可以對這個邏輯不干擾查詢的結構?

+0

SQL表本質上是無序的。您需要一個指定行的排序的列。 –

+0

除了訂單問題,我不明白你的邏輯。根據你的數據,每一行的'autonumber'值都不會增加,因爲每行都有與前一行不同的'ProductSKU/Quantity'值?考慮發佈迄今爲止已經構建的SQL。 – sstan

+1

這沒有什麼'自動'和'數字'的一點點。你需要顯示你的代碼,並澄清你的預期結果。, –

回答

-1

這是一個新的查詢,你想要的邏輯,但似乎很瘋狂對我來說:

SELECT * INTO TABLE1 FROM (VALUES 
(00001597,42,1),(00001600,42,2),(00001597,35,3),(00001600,35,4),(00001597,39,5), 
(00001600,39,6)) as x(ProductSKU, Quantity, RECORDSEQ); 
GO 
;WITH Change as (
SELECT t1.*, 
    CASE WHEN IsNull(t1.ProductSKU,-1) != IsNull(t2.ProductSKU,-1) 
     and IsNull(t1.Quantity,-1) != IsNull(t2.Quantity,-1) 
    THEN 1 ELSE 0 END as Change 
FROM TABLE1 as t1 
LEFT JOIN TABLE1 as t2 ON t1.RECORDSEQ = t2.RECORDSEQ + 1 
) 
SELECT 'ABCD' + CAST(122 + RANK() 
    OVER(PARTITION BY Change ORDER BY RECORDSEQ) as VARCHAR) as Autonumber 
    , ProductSKU, Quantity 
FROM Change 
ORDER BY RECORDSEQ; 
GO 

它返回正是你想要的:

Autonumber ProductSKU Quantity 
ABCD123  1597  42 
ABCD123  1600  42 
ABCD124  1597  35 
ABCD124  1600  35 
ABCD125  1597  39 
ABCD125  1600  39 
+0

很抱歉,如果它不適合,但我的水晶球顯示。如果問題更具信息性,那麼會有準確的答案。 –

+0

嗨,斯拉瓦,請在編輯部分找到我的意見,並建議一個精確的答案:) – Aiswarya

+0

我已經改變了查詢。看看現在是否是你想要的。 –