I want to swap the value between the row but I don't have an idea how to make it as I create a script to do it but the answer still not correct. I get the data raw in from the pdf then convert it into excel 'xls'.
Please see the sample below.
DECLARE @MyTable TABLE(Id INT, RoomNo INT, Class VARCHAR(10), Price VARCHAR(255))
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 1, 21, 'A', '43,028,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 2, NULL, NULL, '43,896,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 3, 20, 'A', '42,681,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 4, NULL, NULL, '43,549,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 5, 19, 'A', '42,334,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 6, NULL, NULL, '43,202,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 7, 18, 'A', '41,987,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 8, NULL, NULL, '42,855,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 9, 17, 'A', '41,467,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 10, NULL, NULL, '42,334,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 11, 16, 'A', '41,120,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 12, NULL, NULL, '41,987,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 13, NULL, 'A', '39,211,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 14, 9, NULL, '40,079,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 15, NULL, NULL, '38,691,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 16, 6, NULL, '39,385,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 17, NULL, 'A', '44,756,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 18, 5, NULL, '45,591,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 19, 21, 'B', '26,598,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 20, 20, 'B', '26,393,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 21, NULL, NULL, '26,905,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 22, 19, 'B', '26,189,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 23, NULL, NULL, '26,700,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 24, 18, 'B', '25,984,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 25, NULL, NULL, '26,496,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 26, 17, 'B', '25,677,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 27, NULL, 'B', '24,041,000'
INSERT INTO @MyTable(Id, RoomNo, Class, Price) SELECT 28, 6, NULL, '24,552,000'
what i tried
SELECT
*,
ISNULL(RoomNo, (SELECT TOP 1 RoomNo FROM @MyTable WHERE Id < MyTable.Id AND RoomNo IS NOT NULL ORDER BY ID DESC)),
ISNULL(Class, (SELECT TOP 1 Class FROM @MyTable WHERE Id < MyTable.Id AND Class IS NOT NULL ORDER BY ID DESC)),
Price
FROM @MyTable as MyTable
Result is wrong:
Id RoomNo Class Price NewRoomNo NewClass Price
1 21 A 43,028,000 21 A 43,028,000
2 NULL NULL 43,896,000 21 A 43,896,000
3 20 A 42,681,000 20 A 42,681,000
4 NULL NULL 43,549,000 20 A 43,549,000
5 19 A 42,334,000 19 A 42,334,000
6 NULL NULL 43,202,000 19 A 43,202,000
7 18 A 41,987,000 18 A 41,987,000
8 NULL NULL 42,855,000 18 A 42,855,000
9 17 A 41,467,000 17 A 41,467,000
10 NULL NULL 42,334,000 17 A 42,334,000
11 16 A 41,120,000 16 A 41,120,000
12 NULL NULL 41,987,000 16 A 41,987,000
13 NULL A 39,211,000 16 A 39,211,000
14 9 NULL 40,079,000 9 A 40,079,000
15 NULL NULL 38,691,000 9 A 38,691,000
16 6 NULL 39,385,000 6 A 39,385,000
17 NULL A 44,756,000 6 A 44,756,000
18 5 NULL 45,591,000 5 A 45,591,000
19 21 B 26,598,000 21 B 26,598,000
20 20 B 26,393,000 20 B 26,393,000
21 NULL NULL 26,905,000 20 B 26,905,000
22 19 B 26,189,000 19 B 26,189,000
23 NULL NULL 26,700,000 19 B 26,700,000
24 18 B 25,984,000 18 B 25,984,000
25 NULL NULL 26,496,000 18 B 26,496,000
26 17 B 25,677,000 17 B 25,677,000
27 NULL B 24,041,000 17 B 24,041,000
28 6 NULL 24,552,000 6 B 24,552,000
I want to achieve:
Id RoomNo Class Price NewRoomNo NewClass Price
1 21 A 43,028,000 NULL NULL 43,028,000
2 NULL NULL 43,896,000 21 A 43,896,000
3 20 A 42,681,000 NULL NULL 42,681,000
4 NULL NULL 43,549,000 20 A 43,549,000
5 19 A 42,334,000 NULL NULL 42,334,000
6 NULL NULL 43,202,000 19 A 43,202,000
7 18 A 41,987,000 NULL NULL 41,987,000
8 NULL NULL 42,855,000 18 A 42,855,000
9 17 A 41,467,000 NULL NULL 41,467,000
10 NULL NULL 42,334,000 17 A 42,334,000
11 16 A 41,120,000 NULL NULL 41,120,000
12 NULL NULL 41,987,000 16 A 41,987,000
13 NULL A 39,211,000 NULL NULL 39,211,000
14 9 NULL 40,079,000 9 A 40,079,000
15 NULL NULL 38,691,000 NULL NULL 38,691,000
16 6 NULL 39,385,000 6 A 39,385,000
17 NULL A 44,756,000 NULL NULL 44,756,000
18 5 NULL 45,591,000 5 A 45,591,000
19 21 B 26,598,000 21 B 26,598,000
20 20 B 26,393,000 NULL NULL 26,393,000
21 NULL NULL 26,905,000 20 B 26,905,000
22 19 B 26,189,000 NULL NULL 26,189,000
23 NULL NULL 26,700,000 19 B 26,700,000
24 18 B 25,984,000 NULL NULL 25,984,000
25 NULL NULL 26,496,000 18 B 26,496,000
26 17 B 25,677,000 17 B 25,677,000
27 NULL B 24,041,000 NULL NULL 24,041,000
28 6 NULL 24,552,000 6 B 24,552,000