如何按具有相同数据类型的多列排序

How to order by multiple columns with same datatype

我想同时对多列进行排序,这意味着我不想先对第一列进行排序,然后再对第二列进行排序,sql 服务器排序依据通常是这样。下面是我希望结果应该如何的示例。请注意,所有列都具有相同的 datatype.Also,请注意,一行中的一列只有数据。

我有一个 table 有值

FirstName LastName MiddleName
matt
jeff
dave
TomBrady
zedaya
Mccafrey
tom

我想按三列中的所有值对此 table 进行排序,以便行应按照行中每个值的升序或降序填充。

输出应该是:

FirstName LastName MiddleName
dave
jeff
matt
Mccafrey
tom
TomBrady
zeday

我有 3 列,其中每一行只有这三列的值。我需要对所有行进行排序,而不考虑列(基本上考虑所有值出现在单个列中,然后排序)。在上面的示例中,根据排序顺序,dave 是最低的,因此该行应该排在第一位。接下来是 jeff row,然后是 Maccafrey、Matt、Tom、TomBrady、Zedaya。

正确的解决方案已被勾选为正确。使用 Contact to order 同时按所有字段。

尝试将空格转换为 table 中最后的 ascii 值并排序,这对你有用吗?

select *
from t
order by 
  IsNull(NullIf(firstname,''),Char(255)),
  IsNull(NullIf(lastname,''),Char(255)),
  IsNull(NullIf(middlename,''),Char(255))

Example Fiddle

您的示例数据含糊不清且具有误导性。如果您真的只想按不是 '' 的任何列进行排序,并保证没有列是 NULL 并且没有 ' ' 等,您可以使用 CONCAT,这将简单地将任何不为空的值与两个空字符串合并:

SELECT FirstName, LastName, MiddleName
  FROM dbo.t
  ORDER BY CONCAT(firstname, lastname, middlename);

输出:

FirstName LastName MiddleName
dave
jeff
matt
Mccafrey
tom
TomBrady
zedaya