如何按具有相同数据类型的多列排序
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))
您的示例数据含糊不清且具有误导性。如果您真的只想按不是 ''
的任何列进行排序,并保证没有列是 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
我想同时对多列进行排序,这意味着我不想先对第一列进行排序,然后再对第二列进行排序,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))
您的示例数据含糊不清且具有误导性。如果您真的只想按不是 ''
的任何列进行排序,并保证没有列是 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 |