0

以下のコードを実行すると、ROWID は常に 1 になります。同じCredit Valueを持つ各アイテムの ID を 1 から開始する必要があります。

;WITH CTETotal AS (SELECT
     TranRegion
    ,TranCustomer
    ,TranDocNo
    ,SUM(TranSale) 'CreditValue'
FROM dbo.Transactions

LEFT JOIN customers AS C 
      ON custregion = tranregion 
      AND custnumber = trancustomer
LEFT JOIN products AS P
      ON prodcode = tranprodcode

GROUP BY
TranRegion
,TranCustomer
,TranDocNo)

SELECT
       r.RegionDesc
      ,suppcodedesc
      ,t.tranreason as [Reason]
      ,t.trandocno as [Document Number]
      ,sum(tranqty) as Qty
      ,sum(tranmass) as Mass
      ,sum(transale) as Sale
      ,cte.CreditValue AS 'Credit Value'
      ,RANK() OVER (PARTITION BY cte.CreditValue ORDER BY cte.CreditValue)AS ROWID

FROM transactions t

LEFT JOIN dbo.Regions AS r    
      ON r.RegionCode = TranRegion  

LEFT JOIN CTETotal AS cte
      ON cte.TranRegion = t.TranRegion
      AND cte.TranCustomer = t.TranCustomer
      AND cte.TranDocNo = t.TranDocNo

GROUP BY 
       r.RegionDesc
      ,suppcodedesc
      ,t.tranreason
      ,t.trandocno
      ,cte.CreditValue

ORDER BY CreditValue ASC

編集

400 のクレジット値はすべて、ROWID を 1 に設定する必要があります。200 のクレジット値はすべて、ROWID を 2 に設定する必要があります。以下同様です。

4

5 に答える 5

5

このようなものが必要ですか?

with cte (item,CreditValue)
as
(
select 'a',8 as CreditValue union all
select 'b',18 union all
select 'a',8 union all
select 'b',18 union all
select 'a',8 
) 
select CreditValue,dense_rank() OVER (ORDER BY item)AS ROWID from cte

結果

CreditValue ROWID
----------- --------------------
8           1
8           1
8           1
18          2
18          2

コード内で置換

,RANK() OVER (PARTITION BY cte.CreditValue ORDER BY cte.CreditValue)AS ROWID 

,DENSE_RANK() OVER (ORDER BY cte.CreditValue)AS ROWID 
于 2012-07-26T10:11:40.873 に答える
3

使用する必要はありませんPARTITION、ただDENSE_RANK() OVER (ORDER BY cte.CreditValue)

于 2012-07-26T10:07:30.880 に答える
0

問題は RANK() OVER (PARTITION BY 句にあると思います

CreditValue ではなくアイテムごとに分割する必要があります

于 2012-07-26T09:41:04.177 に答える
0

これを試して

RANK() OVER (PARTITION BY cte.CreditValue ORDER BY cte.RegionDesc)AS ROWID

于 2012-07-26T09:50:40.033 に答える