http://www.sqlteam.com/item.asp?ItemID=765I've used the idea in this article and expanded it to solve a problem I encountered. I needed to create a sequencial number for each record in a table base on a column. The sequence needs to start from 1 for each new group.Here is what I have so far and I was wondering if someone as something simpler.if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Ordered]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[Ordered]GOCREATE TABLE [dbo].[Ordered] ( [ColA] [int] NOT NULL , [ColB] [int] NOT NULL , [OrderByColA] [int] NULL ) ON [PRIMARY]GOINSERT INTO dbo.Ordered(ColA,ColB)VALUES (1,22)INSERT INTO dbo.Ordered(ColA,ColB)VALUES (1,27)INSERT INTO dbo.Ordered(ColA,ColB)VALUES (1,88)INSERT INTO dbo.Ordered(ColA,ColB)VALUES (2,1)INSERT INTO dbo.Ordered(ColA,ColB)VALUES (2,77)DECLARE @intCounter intSET @intCounter = 0UPDATE dbo.OrderedSET @intCounter = OrderByColA = @intCounter + 1UPDATE dbo.OrderedSET OrderByColA = DD.TrueOrderFROMdbo.Ordered CC LEFT JOIN(SELECT BB.ColA, BB.ColB,CASEWHEN BB.TrueOrder Is Null THEN BB.OrderByColAELSE BB.TrueOrderEND As TrueOrderFROM(SELECT A.ColA, A.ColB, A.OrderByColA, B.MaxOfOrderByColA, (A.OrderByColA - B.MaxOfOrderByColA) As TrueOrderFROM dbo.Ordered A LEFT JOIN(SELECT AA.ColA, Max(AA.OrderByColA) As MaxOfOrderByColA FROM dbo.Ordered AA GROUP BY AA.ColA) B ON A.ColA = B.ColA + 1) BB ) DD ON CC.ColA = DD.ColA And CC.ColB = DD.ColBSELECT * FROM Ordered
Another problem I'm having is that ColA is not sequencial so A.ColA = B.ColA + 1 is nothing going to workI'm trying a correlated sub query but I just can't get it.I've been trying this for the inner part but it's not right.SELECT A.ColA, A.ColB, A.OrderByColA, B.ColA, B.MaxOfOrderByColA, (A.OrderByColA-B.MaxOfOrderByColA) As TrueOrderFROM dbo.Ordered A,(SELECT AA.ColA, Max(AA.OrderByColA) As MaxOfOrderByColA FROM dbo.Ordered AA GROUP BY AA.ColA ) B WHERE B.ColA = (SELECT MIN(C.ColA) FROM dbo.Ordered C WHERE C.ColA < A.ColA) AND A.ColA <> B.ColA
Here are the values for thisINSERT INTO dbo.Ordered(ColA,ColB)VALUES (1,22)INSERT INTO dbo.Ordered(ColA,ColB)VALUES (1,27)INSERT INTO dbo.Ordered(ColA,ColB)VALUES (1,88)INSERT INTO dbo.Ordered(ColA,ColB)VALUES (21,1)INSERT INTO dbo.Ordered(ColA,ColB)VALUES (21,77)INSERT INTO dbo.Ordered(ColA,ColB)VALUES (32,1)INSERT INTO dbo.Ordered(ColA,ColB)VALUES (32,77)
The correct result should be1 11 21 321 121 232 132 2If anyone can help me see the light on this it would be great.Thanks in Advance.Edited by - ValterBorges on 10/31/2002 21:53:42