如何根据表主键分配交替行号?

时间:2011-05-26 08:03:32

标签: sql-server stored-procedures sql

我有一个名为Product

的数据表
ProductID  ProductName
1            ABC
2            PQR
3            XYZ
4            HJK
5            LKJ
6            MNB
...          .... 

还有更多产品。我想要的是选择查询的结果:

RowNo ProductID ProductName
1      1           ABC
1      2           PQR
2      3           XYZ
2      4           HJK
1      5           LKJ
1      6           MNB
2      7           klj
2      8           hjg

然后1,1,2,2 1,1表中的记录数。是否有可能,如果可以,我该怎么做?

1 个答案:

答案 0 :(得分:3)

这适用于假设ProductID是连续的样本数据:

SELECT
   CASE WHEN ProductID % 4 = 0 OR (ProductID+1) % 4 = 0 THEN 2 ELSE 1 END,
   ProductID,
   ProductName
FROM
   Product

现在,猜测结果集中的意思是ProductID

中可能存在间隙
SELECT
   CASE WHEN ContiguousProductID % 4 = 0 OR (ContiguousProductID+1) % 4 = 0 THEN 2 ELSE 1 END,
   --ContiguousProductID,
   --CASE WHEN ProductID % 4 = 0 OR (ProductID+1) % 4 = 0 THEN 2 ELSE 1 END,
   ProductID,
   ProductName
FROM
    (
    SELECT
        ROW_NUMBER() OVER (ORDER BY ProductID) AS ContiguousProductID,
        ProductName, ProductID
    FROM 
        dbo.Product
    ) P2