对于MS Access,我有以下SQL SELECT
语句,当两个表中的PlayerNo
字段 - HPFoulsPoints
和VPFoulsPoints
是数字类型时,它完全符合我的要求:
Select HPFoulsPoints.*
, 1 As OrderTbl
From HPFoulsPoints
Union All
Select VPFoulsPoints.*
, 2 As OrderTbl
From VPFoulsPoints
Order By OrderTbl
, PlayerNo
我需要将PlayerNo
字段更改为文字类型,但仍有PlayerNo
字段按数字值顺序排序,就像上面SELECT
一样,所以我认为这很容易执行以下操作:
Select HPFoulsPoints.*
, 1 As OrderTbl
From HPFoulsPoints
Union All
Select VPFoulsPoints.*
, 2 As OrderTbl
From VPFoulsPoints
Order By OrderTbl
, Val(PlayerNo)
那SELECT
不起作用;我收到以下错误:
错误:-2147217913 说明:[Microsoft] [ODBC Microsoft Access驱动程序] ORDER BY表达式(Val(PlayerNo))包括查询未选择的字段。只有第一个查询中请求的字段才能包含在ORDER BY表达式中。
如何解决上面SELECT
使用ORDER BY OrderTbl, Val(PlayerNo)
的工作方式与顶部适用于SELECT
的第一个ORDER BY OrderTbl, PlayerNo
完全相同?
请记住,我需要新的SELECT
,其中PlayerNo
是一个文字类型字段,就像顶部SELECT
一样,其中PlayerNo
是数字类型字段!
答案 0 :(得分:1)
我相信您只需要在子查询中封装您拥有的所有内容(order by子句除外)。
SELECT *
FROM (
SELECT HPFoulsPoints.*, 1 AS OrderTbl
FROM HPFoulsPoints
UNION ALL
SELECT VPFoulsPoints.*, 2 AS OrderTbl
FROM VPFoulsPoints
) AS a
ORDER BY a.OrderTbl, Val(a.PlayerNo)
编辑SQL以反映评论中的建议/更正,以防其他人偶然发现。
答案 1 :(得分:0)
这是最终正确的SQL语句:
SELECT *
FROM (
SELECT HPFoulsPoints.*, 1 AS OrderTbl
FROM HPFoulsPoints
UNION ALL
SELECT VPFoulsPoints.*, 2 AS OrderTbl
FROM VPFoulsPoints
) AS a
ORDER BY a.OrderTbl, Val(a.PlayerNo)