Last active
February 14, 2018 14:31
-
-
Save thluiz/228c9e496322695e66213815aa80254e to your computer and use it in GitHub Desktop.
Trying to compare multiple implementations of dynamic ordering in sql server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
create table #test_data(col1 varchar(100), col2 varchar(100)) | |
declare @i int = 0 | |
while (@i < 1000000) | |
begin | |
insert into #test_data(col1, col2) | |
values ('col1_' + right('00000000' + cast(@i as varchar(9)), 9), CONVERT(varchar(255), NEWID())) | |
set @i = @i + 1 | |
end | |
declare @ordering_field int = 0 | |
declare @descending bit = 1 | |
set @ordering_field = 1 | |
set @descending = 0 | |
select top 100 | |
ROW_NUMBER() OVER (ORDER BY case when @ordering_field = 1 then col1 else col2 end) * (1 - 2*@descending) rownumber, * | |
from #test_data | |
order by rownumber | |
set @ordering_field = 1 | |
set @descending = 1 | |
select top 100 | |
ROW_NUMBER() OVER (ORDER BY case when @ordering_field = 1 then col1 else col2 end) * (1 - 2*@descending) rownumber, * | |
from #test_data | |
order by rownumber | |
set @ordering_field = 0 | |
set @descending = 0 | |
select top 100 * | |
from #test_data | |
order by | |
case when @descending = 1 then | |
case when @ordering_field = 1 then col1 else col2 end | |
end, | |
case when @descending = 0 then | |
case when @ordering_field = 1 then col1 else col2 end | |
end desc | |
set @ordering_field = 0 | |
set @descending = 0 | |
select top 100 * | |
from #test_data | |
order by | |
case when @descending = 1 then | |
case when @ordering_field = 1 then col1 else col2 end | |
end, | |
case when @descending = 0 then | |
case when @ordering_field = 1 then col1 else col2 end | |
end desc | |
set @ordering_field = 1 | |
set @descending = 1 | |
select top 100 * | |
from | |
(select ROW_NUMBER() OVER (order by col1) rownumber_col1, | |
ROW_NUMBER() OVER (order by col2) rownumber_col2, | |
* | |
from #test_data) t | |
order by | |
case when @ordering_field = 1 then rownumber_col1 | |
else rownumber_col2 end | |
set @ordering_field = 0 | |
set @descending = 0 | |
select top 100 * | |
from | |
(select ROW_NUMBER() OVER (order by col1) rownumber_col1, | |
ROW_NUMBER() OVER (order by col2) rownumber_col2, | |
* | |
from #test_data) t | |
order by | |
case when @ordering_field = 1 then rownumber_col1 | |
else rownumber_col2 end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment