使用ORDER BY with UNION的SQL无法正确排序数字(例如,8之前的10)
我试着寻找答案,在这个网站上读了很多帖子,但仍然找不到我想要的答案 我正在尝试对一系列的数字进行排序,它们是真实的查找,也有一个*不是,我可以在不需要添加假*的情况下进行很好的排序,但不能在后面进行排序 我试过了使用ORDER BY with UNION的SQL无法正确排序数字(例如,8之前的10),sql,sql-order-by,union,Sql,Sql Order By,Union,我试着寻找答案,在这个网站上读了很多帖子,但仍然找不到我想要的答案 我正在尝试对一系列的数字进行排序,它们是真实的查找,也有一个*不是,我可以在不需要添加假*的情况下进行很好的排序,但不能在后面进行排序 我试过了 SELECT DISTINCT MasterTable.ClassName, MasterTable.ClassYear FROM MasterTable UNION ALL SELECT DISTINCT "*" As [ClassName], "1" As [ClassYear]
SELECT DISTINCT MasterTable.ClassName, MasterTable.ClassYear
FROM MasterTable
UNION ALL
SELECT DISTINCT "*" As [ClassName], "1" As [ClassYear]
FROM MasterTable
ORDER BY MasterTable.ClassYear;
及
但是他们都把学年返回为1,10,12,8。。。而不是1,8,10,12
任何帮助都将不胜感激,
谢谢:您返回的年份是字符串,而不是数字。这意味着它是按文本排序的,而不是按数字排序的
以数字形式返回年份,或者在排序时将值转换为数字。您以字符串形式返回年份,而不是数字。这意味着它是按文本排序的,而不是按数字排序的
以数字形式返回年份,或者在排序时将值转换为数字。属性将这些值作为字符串排序。如果您想让它们以数字顺序排列,请尝试使用类似castmasterable.ClassYear AS int的方法,可以选择select或order by,也可以同时选择两者,具体取决于最终构造查询的方式
将SELECT…,1作为[ClassYear],而不是SELECT…,1作为[ClassYear]。这是将这些值作为字符串排序的属性。如果您想让它们以数字顺序排列,请尝试使用类似castmasterable.ClassYear AS int的方法,可以选择select或order by,也可以同时选择两者,具体取决于最终构造查询的方式
将SELECT…,1作为[ClassYear],而不是SELECT…,1作为[ClassYear]。MasterTable.ClassYear是varchar,因此它将作为字符串排序 您必须在查询中转换它或修复列类型 对于第2条,您也只需要:
SELECT "*" As [ClassName], "1" As [ClassYear] --No FROM MasterTable
然而,你可以欺骗并这样做。这里1将是int,并将强制从第1子句转换为int,因为
SELECT "*" As [ClassName], 1 As [ClassYear] --force int. And fixed on edit
UNION ALL
SELECT DISTINCT MasterTable.ClassName, MasterTable.ClassYear
FROM MasterTable
ORDER BY ClassYear; --no table ref needed
MasterTable.ClassYear是varchar,因此它将作为字符串进行排序 您必须在查询中转换它或修复列类型 对于第2条,您也只需要:
SELECT "*" As [ClassName], "1" As [ClassYear] --No FROM MasterTable
然而,你可以欺骗并这样做。这里1将是int,并将强制从第1子句转换为int,因为
SELECT "*" As [ClassName], 1 As [ClassYear] --force int. And fixed on edit
UNION ALL
SELECT DISTINCT MasterTable.ClassName, MasterTable.ClassYear
FROM MasterTable
ORDER BY ClassYear; --no table ref needed
@Tim:1将转换为列的数据类型,因为int的优先级高于varchar。除非我遗漏了什么,否则表列应该是varchar@Tim:如果字段是数据库中的数字,则第二个查询中的1值确定数据类型。如果你把它改为1,数据类型将保持数字。我错过了。谢谢你们两位:@Guffa:SELECT 1 AS foo UNION ALL SELECT'bar'=失败。优先于所有工会条款,而不是最后一条。同样失败:选择“bar”作为foo UNION ALL SELECT1@gbn:对于SQL Server数据库来说,这是正确的,但这里不使用这一点。请注意用作字符串分隔符的引号。@Tim:1将转换为列的数据类型,因为int的优先级高于varchar。除非我遗漏了什么,否则表列应该是varchar@Tim:如果字段是数据库中的数字,则第二个查询中的1值确定数据类型。如果你把它改为1,数据类型将保持数字。我错过了。谢谢你们两位:@Guffa:SELECT 1 AS foo UNION ALL SELECT'bar'=失败。优先于所有工会条款,而不是最后一条。同样失败:选择“bar”作为foo UNION ALL SELECT1@gbn:对于SQL Server数据库来说,这是正确的,但这里不使用这一点。请注意用作字符串分隔符的引号。我需要从MasterTable将其置于Union all之上,但它现在可以工作了。谢谢:移除不同于联盟之上的所有,很抱歉,我需要从MasterTable中放入联盟之上的所有,但它现在起作用了。谢谢:从上面移除不同的联盟都很抱歉