2013-03-24 94 views
0

我有我需要查询产生一个结果集像这样的表:SQL查询计数器列

 
ColA ColB ColC 
==== ==== ==== 
AA  BC  1 
AA  BD  2 
BB  DD  1 
BB  EE  2 
BB  FF  3 
CC  AA  1 

(还有比这“虚构”的样品更多的行)

只有可乐+ ColB存在于表上,ColC需要由查询生成。每个不同的'ColA'需要将ColC中的计数重新设置为1,但是直到ColA中的下一个值向上计数。

我正在使用MS/SQL2008。

谢谢你 - 我试图寻找,看看其他人提出类似的问题,并已经看到了查询,其中利用:

row_number() over (order by ColA, ColB)

,但据我了解,这将只是给我一个排序列表根据这个例子1..6?

回答

0

您需要对行编号进行分区 - 每个分区都有自己的一组1,2,3,...行号。

row_number() over (partition by ColA order by ColB) 
+0

谢谢 - 这是完美的WillA – Brian 2013-03-24 21:42:14

0
SELECT 
    ColA, 
    ColB, 
    row_number() over (partition by ColA order by ColB) as ColC 
FROM 
    Test 

DEMO

您可以添加ORDER BY ColA,强迫命令你想达成的目标(但演示展示了它没有必要)。

+0

谢谢@MarcinJuraszek,有帮助的例子。我接受威尔作为我接受的答案,因为他首先到达了那里 - 但是,再次感谢您抽出时间回答。 – Brian 2013-03-24 21:48:28