如何为MS Access修复此SQL SELECT语句

时间:2016-12-09 19:10:51

标签: sql ms-access

对于MS Access,我有以下SQL SELECT语句,当两个表中的PlayerNo字段 - HPFoulsPointsVPFoulsPoints是数字类型时,它完全符合我的要求:

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是数字类型字段!

2 个答案:

答案 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)