Interchange the position of 1st row with 2nd, 3rd with 4th, 5th with 6th and so on.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 81
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Swap Alternate Rows with Power Query
Power Query solution 1 for Swap Alternate Rows, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Data = Table.FromColumns(
{
List.Transform(
List.Transform(
List.Transform(List.Split(Source[Data], 2), each Table.FromList(_)),
each Table.AddIndexColumn(_, "Index", 1, 1)
),
each Table.Sort(_, {{"Index", Order.Descending}})
)
}
),
Result = Table.ExpandTableColumn(Data, "Column1", {"Column1"}, {"Expected Answer"})
in
ResultPower Query solution 2 for Swap Alternate Rows, proposed by Luan Rodrigues:
let
Fonte = Data,
a = Table.AddIndexColumn(Fonte, "Índice", 1, 1, Int64.Type),
b = Table.SelectRows(
Table.AddColumn(a, "Personalizar", each Number.IsOdd([Índice])),
each [Personalizar] = false
)[Data],
c = Table.SelectRows(
Table.AddColumn(a, "Personalizar", each Number.IsOdd([Índice])),
each [Personalizar] = true
)[Data],
Result = List.Select(List.Combine(List.Zip({b, c})), each _ <> null)
in
ResultPower Query solution 3 for Swap Alternate Rows, proposed by Brian Julius:
let
Source = List.Split(FlipRaw[Data], 2),
ListFlip = List.Transform(Source, each List.Reverse(_)),
ToTable = Table.ExpandListColumn(
Table.FromList(ListFlip, Splitter.SplitByNothing(), {"Data"}, null, ExtraValues.Error),
"Data"
)
in
ToTablePower Query solution 4 for Swap Alternate Rows, proposed by Bhavya Gupta:
Power Query Submission -
Power Query solution 5 for Swap Alternate Rows, proposed by Jaroslaw Kujawa:
let
Source = Excel.CurrentWorkbook(){[Name = "Data"]}[Content],
#"Added Index" = Table.AddIndexColumn(Source, "Index", 1),
#"Added Custom" = Table.AddColumn(#"Added Index", "Custom", each Number.RoundUp([Index] / 2)),
#"Sorted Rows" = Table.Sort(
#"Added Custom",
{{"Custom", Order.Ascending}, {"Index", Order.Descending}}
)[Data]
in
#"Sorted Rows"Power Query solution 6 for Swap Alternate Rows, proposed by Matthias Friedmann:
let
Source = Excel.CurrentWorkbook(){[Name = "ChangedPosition"]}[Content][Data],
PositionChange = List.Combine(List.Transform(List.Split(Source, 2), each List.Reverse(_)))
in
PositionChangePower Query solution 7 for Swap Alternate Rows, proposed by Venkata Rajesh:
let
Source = Data,
Output = List.Select(
List.Combine(
List.Zip({List.Alternate(Source[Data], 1, 1), List.Alternate(Source[Data], 1, 1, 1)})
),
each _ <> null
)
in
OutputPower Query solution 8 for Swap Alternate Rows, proposed by Jan Willem Van Holst:
let
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"i45WCslMTy1SitWJVvLJzM8DM1xzUgsyEvNKIKKp+QWJRSlgdgBQMAOq2jkjNbUkMQPMDs/PSQMzvBLTSxMh8r75edmplUqxsQA=",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [Data = _t]
),
AddedIndex = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
Count = Table.RowCount(AddedIndex),
ShiftList = List.Repeat({1, - 1}, 4) & {0},
TableShift = Table.FromColumns(
Table.ToColumns(AddedIndex) & {ShiftList},
{"Animal", "Index", "Shift"}
),
#"Changed Type" = Table.TransformColumnTypes(TableShift, {{"Shift", Int64.Type}}),
#"Inserted Addition" = Table.AddColumn(
#"Changed Type",
"Addition",
each [Index] + [Shift],
Int64.Type
),
#"Merged Queries" = Table.NestedJoin(
#"Inserted Addition",
{"Addition"},
#"Inserted Addition",
{"Index"},
"Inserted Addition",
JoinKind.LeftOuter
),
#"Expanded Inserted Addition" = Table.ExpandTableColumn(
#"Merged Queries",
"Inserted Addition",
{"Animal"},
{"Animal.1"}
),
#"Removed Columns" = Table.RemoveColumns(
#"Expanded Inserted Addition",
{"Index", "Shift", "Addition"}
)
in
#"Removed Columns"Power Query solution 9 for Swap Alternate Rows, proposed by Deron Huskey:
let
Source = Excel.CurrentWorkbook(){[Name = "Data"]}[Content],
IndexStartFrom1 = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
AddSortIndex = Table.AddColumn(
IndexStartFrom1,
"SortIndex",
each [Index] + Number.Mod([Index], 2)
),
FinalSort = Table.Sort(
AddSortIndex,
{{"SortIndex", Order.Ascending}, {"Index", Order.Descending}}
),
FinalResult = Table.SelectColumns(FinalSort, {"Data"})
in
FinalResultSolving the challenge of Swap Alternate Rows with Excel
Excel solution 1 for Swap Alternate Rows, proposed by Rick Rothstein:
=LET(a,A2:A10,f,FILTER(TOCOL(HSTACK(OFFSET(a,1,0),a)),MOD(SEQUENCE(2*COUNTA(a),,0),4)<2),FILTER(f,ISTEXT(f)))
Excel solution 2 for Swap Alternate Rows, proposed by Rick Rothstein:
=LET(
a,
A2:A10,
s,
SEQUENCE(
2*COUNTA(
a
),
,
0
),
TOCOL(
INDEX(
a,
2+2*INT(
s/2
)-MOD(
s,
2
)
),
3
)
)
Excel solution 3 for Swap Alternate Rows, proposed by John V.:
=INDEX(
A2:B10,
{2;1;4;3;6;5;8;7;9}
)
Dynamic option:
✅=LET(
d,
A2:A10,
m,
MOD(
ROW(
d
),
2
),
TOCOL(
HSTACK(
FILTER(
d,
m
),
FILTER(
d,
m=0
)
),
3
)
)
Excel solution 4 for Swap Alternate Rows, proposed by محمد حلمي:
=LET(
a,
ROW(
1:9
),
SORTBY(
A2:A10,
IF(
ISODD(
a
),
EVEN(
a
),
a-1
)
)
)
Excel solution 5 for Swap Alternate Rows, proposed by محمد حلمي:
=LET(
a,
ROW(
1:10
),
r,
IFERROR(
INDEX(
A2:A10,
IF(
ISODD(
a
),
EVEN(
a
),
a-1
)
),
),
FILTER(
r,
ISTEXT(
r
)
)
)
Excel solution 6 for Swap Alternate Rows, proposed by Kris Jaganah:
=LET(a,A2:A10,b,MOD(ROW(a),2),TOCOL(HSTACK(FILTER(a,b=1,0),FILTER(a,b=0,0)),2))
Excel solution 7 for Swap Alternate Rows, proposed by Julian Poeltl:
=LET(
D,
A2:A10,
R,
ROWS(
D
),
RR,
ROUNDDOWN(
R/2,
0
)*2,
E,
CHOOSEROWS(
D,
TOCOL(
HSTACK(
SEQUENCE(
RR/2,
,
2,
2
),
SEQUENCE(
RR/2,
,
,
2
)
)
)
),
IF(
RR<>R,
VSTACK(
E,
TAKE(
D,
-1
)
),
E
)
)
Excel solution 8 for Swap Alternate Rows, proposed by Aditya Kumar Darak 🇮🇳:
=LET(
_n, 2,
_d, A2:A10,
_rw, ROWS(_d),
_seq, SORT(SEQUENCE(_rw / _n + 1, _n), , -1, TRUE),
_r, TOCOL(INDEX(_d, _seq), 3),
_r
)
Solution 2:
=LET(
_n, 2,
_d, A2:A10,
_wr, WRAPROWS(_d, _n),
_cc, CHOOSECOLS(_wr, SEQUENCE(1, _n, _n, -1)),
_r, TOCOL(_cc, 3),
_r
)
Excel solution 9 for Swap Alternate Rows, proposed by Timothée BLIOT:
=LET(Data,
A2:A10,
Sequence,
MOD(
SEQUENCE(
ROWS(
Data
)
),
2
),
RowOne,
(FILTER(
Data,
Sequence
)),
RowTwo,
(FILTER(
Data,
NOT(
Sequence
)
)),
TOCOL(
CHOOSECOLS(
HSTACK(
RowOne,
RowTwo
),
2,
1
),
3
))
Excel solution 10 for Swap Alternate Rows, proposed by Bhavya Gupta:
=TOCOL(
CHOOSECOLS(
WRAPROWS(
A2:A10,
2
),
2,
1
),
3
)
Excel solution 11 for Swap Alternate Rows, proposed by Charles Roldan:
=SORTBY(A2:A10,
LAMBDA(x,x+2*MOD(x,2))(
SEQUENCE(ROWS(A2:A10))))
Excel solution 12 for Swap Alternate Rows, proposed by Stefan Olsson:
=MAKEARRAY(
ROWS(
A2:A10
),
1,
LAMBDA(
rr,
cc,
IFS(
ISEVEN(
rr
),
INDEX(
A2:A10,
rr-1
),
rr=ROWS(
A2:A10
),
INDEX(
A2:A10,
rr
),
TRUE,
INDEX(
A2:A10,
rr+1
)
)
)
)
Excel solution 13 for Swap Alternate Rows, proposed by Abhishek Kumar Jain:
=LET(a,A2:A10,b,SEQUENCE(ROWS(a)),c,IF(MOD(b,2)=1,b+1,b-1),d,IF(c>MAX(b),c-1,c),INDEX(a,d))
Excel solution 14 for Swap Alternate Rows, proposed by El Badlis Mohd Marzudin:
=LET(
_data,
A2:A10,
_rn,
MOD(
SEQUENCE(
ROWS(
_data
)
)-1,
2
),
_sbs,
HSTACK(
FILTER(
_data,
_rn=1
),
FILTER(
_data,
_rn=0
)
),
TOCOL(
_sbs,
3
)
)
Excel solution 15 for Swap Alternate Rows, proposed by Amardeep Singh:
=LET(data,A2:A10,c,COUNTA(data),s,SEQUENCE(c),r,IF(ISODD(s),s+1,s-1),f,IF(r>c,c,r),INDEX(data,f))
Excel solution 16 for Swap Alternate Rows, proposed by Viswanathan M B:
=Let(Rng, A2:A10,
Sqn, sequence(rows(rng)),
ChngSqn, switch(TRUE, Sqn=Rows(Rng), Sqn,
isodd(Sqn),sqn+1, sqn-1),
Index(Rng, ChngSqn))
Excel solution 17 for Swap Alternate Rows, proposed by Murat Hasanoglu:
=IF(ISBLANK(INDEX(A:A,IF(MOD(ROW()-1,2),1,-1)+ROW())),A2,INDEX(A:A,IF(MOD(ROW()-1,2),1,-1)+ROW()))
Excel solution 18 for Swap Alternate Rows, proposed by Dennis Priester:
=@LET( rowindex,1+ROW()-@ROW([Data] ),
IF( ISODD(rowindex),@IFERROR(@INDEX([Data],rowindex+1), INDEX([Data],rowindex) ), INDEX( [Data],rowindex-1) ) )
This thing assumes your A1:B10 is in a table, and it doesnt matter where on the sheet the table is placed.
The @ROW([Data] )
Excel solution 19 for Swap Alternate Rows, proposed by Avneet Singh:
=Index($A$2:$A$10, if(row(A2)=odd(row(A2)), countA(A$2:A2)-1, countA(A$2:A3)))
Solving the challenge of Swap Alternate Rows with SQL
SQL solution 1 for Swap Alternate Rows, proposed by Zoran Milokanović:
WITH
DATA_PREPARATION
AS
(
SELECT
D.DATA
,ROW_NUMBER() OVER () AS ORDINAL_NUMBER
FROM DATA D
)
SELECT
F.DATA
,DECODE(F.ODD_FLAG, /*EVEN*/ 0, F.PREVIOUS_DATA, /*ODD*/ NVL(F.SUBSEQUENT_DATA, F.DATA)) AS EXPECTED_ANSWER
FROM
(
SELECT
DP.ORDINAL_NUMBER
, DP.DATA
,LAG(DP.DATA) OVER (ORDER BY DP.ORDINAL_NUMBER) AS PREVIOUS_DATA
,LEAD(DP.DATA) OVER (ORDER BY DP.ORDINAL_NUMBER) AS SUBSEQUENT_DATA
,MOD(DP.ORDINAL_NUMBER, 2) AS ODD_FLAG
FROM DATA_PREPARATION DP
) F
ORDER BY
F.ORDINAL_NUMBER
;
