我在这个查询中排序很困难
SELECT
Strasse,
CONCAT(CAST(Hausnummer AS CHAR), COALESCE(Buchstabe, '')),
Name
FROM
Adresse
WHERE
GebietID = 'G20141205064123101'
ORDER BY
Strasse ASC , CONCAT(CAST(Hausnummer AS CHAR), COALESCE(Buchstabe, '')) ASC , Name ASC;
concat用于连接数值和单个字符。 生成的列似乎基于HEX值而非实际字符串值进行排序。
有没有办法按字母顺序排序?
编辑: 以下是一些示例数据:
'A20141205235645111', 'G20141205064123101', 'Amberg', 'Ahnherrnstraße', '6', NULL, 'Meier Johann Olga'
'A20141205235645361', 'G20141205064123101', 'Amberg', 'Ahnherrnstraße', '30', NULL, 'Stang Lidija Swetlana Waldemar'
'A20141215182839021', 'G20141205064123101', 'Amberg', 'Ahnherrnstraße', '6', NULL, 'MANFRED1'
结果:
'Ahnherrnstraße', '30', 'Stang Lidija Swetlana Waldemar'
'Ahnherrnstraße', '6', 'MANFRED1'
'Ahnherrnstraße', '6', 'Meier Johann Olga'
答案 0 :(得分:2)
为什么不简单
ORDER BY
Strasse, Hausnummer, Buchstabe, Name;
concat的结果是一个角色。这就是为什么你的订购是词汇(在6之前30)。如果您单独订购列,则将Hausnummer视为数字并按数字排序。如果两个Hausnummers相同,SQL将在Buchstabe之后对这些条目进行排序。如果你使用ASC,那么将首先出现NULL值,顺便说一下,这是默认值。
答案 1 :(得分:0)
这是具体的,但我认为你想按街道号码和他们的名字排序,但是你得到的是一个不符合数字条件的词汇顺序。一种选择是在排序中增加一个额外的级别,将街道名称与其号码分开,即
ASC
请注意,在MySQL中,默认排序顺序是升序,因此您无需在任何地方使用data.table
。
答案 2 :(得分:0)
让我觉得你有Stang
家人住在30B Ahnherrnstraße
。家人Meier
可能是30 Ahnherrnstraße
然后,您将在8 Ahnherrnstraße
处找到其他人。
我想您想按以下顺序显示这些内容。
8 Ahnherrnstraße
30 Ahnherrnstraße
30B Ahnherrnstraße
为了正确地执行此操作,您不能在Hausnummer
子句中将ORDER BY
转换为字符串,或者它将按词汇顺序排序而不是数字排序。
您需要ORDER BY Strasse, Hausnummer, COALESCE(Buchstabe,' '), Name
为什么COALESCE(Buchstabe,' ')
?你想要确保你的项目有一个NULL Buchstabe优先于其他项目。空间是第一个角色。如果您需要最后一次,请使用COALESCE(Buchstabe,'~')
。