Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ORDER BY with UNION的SQL无法正确排序数字(例如,8之前的10)_Sql_Sql Order By_Union - Fatal编程技术网

使用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中放入联盟之上的所有,但它现在起作用了。谢谢:从上面移除不同的联盟都很抱歉