Link to home
Start Free TrialLog in
Avatar of emi_sastra
emi_sastra

asked on

From Range Data To Full Detail Range Data

Hi All,

I have below data :

1      AUDI
55      AUDI
109      ALFA ROMEO
127      BMW
181      BMW

Open in new window

I want to convert it into :

1  AUDI
2  AUDI
..
55  
56 AUDI
.
.
108 AUDI
109 ALFA ROMEO
110 ALFA ROMEO
.
.
 126

And etc.

How could I do it ?
Avatar of Éric Moreau
Éric Moreau
Flag of Canada image

which version of SQL server?
that will work:
DECLARE @cars TABLE (
	ID		INT,
	Make	VARCHAR(50)
)

DECLARE @Output TABLE (
	ID		INT,
	Make	VARCHAR(50)
)

INSERT INTO @cars ( ID, Make )
VALUES (1, 'Audi')
, (55, 'Audi')
, (109, 'ALFA ROMEO')
, (127, 'BMW')
, (181, 'BMW')

SELECT * FROM @cars ORDER BY ID

DECLARE @ID INT
DECLARE @Make VARCHAR(50)
DECLARE @PrevID INT
DECLARE @PrevMake VARCHAR(50)

DECLARE db_cursor CURSOR FOR 
	SELECT ID, Make FROM @cars ORDER BY ID 

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @ID, @Make

WHILE @@FETCH_STATUS = 0  
BEGIN  
	--SELECT @ID, @Make, @PrevID, @PrevMake

	IF @PrevID IS NULL
	BEGIN
		SET @PrevID = @ID
		SET @PrevMake = @Make
	END
	ELSE 
	BEGIN 
		WHILE @PrevID < @ID
		BEGIN
			INSERT INTO @Output ( ID, Make ) VALUES (@PrevID, @PrevMake )
			SET @PrevID = @PrevID + 1
		END 

		SET @PrevID = @ID
		SET @PrevMake = @Make
	END 

	FETCH NEXT FROM db_cursor INTO @ID, @Make
END 

INSERT INTO @Output ( ID, Make ) VALUES (@PrevID, @PrevMake )

CLOSE db_cursor  
DEALLOCATE db_cursor 

SELECT * FROM @Output ORDER BY ID

Open in new window

Avatar of emi_sastra
emi_sastra

ASKER

Hi Eric,

Is there any other way than using cursor ?

Thank you.
which version of SQL server?
SQL 2014

Thank you.
ASKER CERTIFIED SOLUTION
Avatar of Éric Moreau
Éric Moreau
Flag of Canada image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Hi Eric,

Thank you very much for your help.