2017-08-27 28 views
0
Column A Column B 
-------------------- 
    1   3 
    2   3 
    3   3 
    3   3 
    4   3 

固定的精确值,则返回的1 2 3 3 4ORDER BY A DESC回报4 3 3 2 1的输出的输出。排序的列通过当我命令由列A类似<code>ORDER BY A ASC</code>在顶部在SQL Server

但我需要在第一个位置修正一个或两个值。我需要与列B进行比较。因此,与列B匹配的是哪个值,它将位于第一个位置。

ORDER BY A ASC将返回一个输出,如3 3 1 2 4。可能吗?

+0

请包括让你的问题明确的样本数据。 –

回答

0

这很简单,因为您可以通过多个条件进行订购。先平等先秩序,然后再平等。

select a, b 
from tablename 
order by if(a=b, 0, 1), a, b 
+1

'order by CASE when a = b THEN 0 ELSE 1 END ASC,a,b' –

+0

@TimBiegeleisen这根本就不是连接,只有一个带有'order by'子句的单个表。由于a = b测试,应该只是慢几个百分点。 – flaschenpost

+0

@VojtěchDohnal这里'CASE WHEN'的装扮是什么?我觉得它更复杂。说实话,我会用'a = b,a,b'命令。 ;-) – flaschenpost

1

使用ANSI-SQL语法应该这样写:

SELECT a, b 
FROM tablename 
ORDER BY CASE WHEN a=b THEN 0 ELSE 1 END, a, b 
0

你可能只是想通过区别命令:

order by abs(a - b) 
+0

你能解释一下吗?我想保持匹配的值在顶部。没有区别。 –

+0

@parvessuzon。 。 。这是由两列的差异的绝对值命令。这似乎是你在“a”和“b”列中选择“3”的行的方式。 –