0

好的,我正在进行的一个项目(在 MS ACCESS 中)是计算客户为汽车公司购买的每个额外“选项”的数量。为此,我创建了以下查询以将每个选项放入一列,然后将下一列中每个选项的总数相加(为便于阅读和匿名而编辑)。

SELECT a.options, Count(*)
FROM(
SELECT TBL.Des1 AS options FROM TBL UNION ALL
SELECT TBL.Des2 AS options FROM TBL UNION ALL
SELECT TBL.Des3 AS options FROM TBL UNION ALL
SELECT TBL.Des4 AS options FROM TBL UNION ALL
SELECT TBL.Des5 AS options FROM TBL UNION ALL
SELECT TBL.Des6 AS options FROM TBL UNION ALL
SELECT TBL.Des7 AS options FROM TBL UNION ALL
SELECT TBL.Des8 AS options FROM TBL UNION ALL
SELECT TBL.Des9 AS options FROM TBL UNION ALL
SELECT TBL.Des10 AS options FROM TBL UNION ALL
SELECT TBL.Des11 AS options FROM TBL UNION ALL
SELECT TBL.Des12 AS options FROM TBL UNION ALL
SELECT TBL.Des13 AS options FROM TBL) AS a

INTO TBL_OPTION_ALL
GROUP BY a.options;

我的问题是尝试运行时出现错误“FROM 子句中的语法错误”。错误提示终止后,底部的 INTO 语句将突出显示。最初,我用括号分隔每个 SELECT,但后来我收到“来自 JOIN 子句的语法错误”的错误,并找到了一个类似的帖子,该问题通过删除括号来解决。我最初也只是(...)a创建别名,但我已经把它变成(...) AS a了这个,因为我不确定创建别名的方法是否适用于 Access。

我有一些关于我的问题所在的理论(从最可能到最不可能排序)

  1. 当我应该使用 [] 时,我正在使用 (),或者
    • 我在一些 UNION 调用中缺少括号,或者
    • 我需要以完全不同的方式组织括号,并像以前尝试过的那样分解 UNION。
  2. 它无法处理这么多的 UNION。如果是这种情况,我该如何构建它?我必须建立多个查询吗?
4

3 回答 3

4

试试下面的代码,你给表起别名而不是字段。

SELECT a.options, Count(*)
FROM(
SELECT TBL.Des1  AS options FROM TBL UNION ALL
SELECT TBL.Des2 AS options FROM TBL UNION ALL
SELECT TBL.Des3  AS options FROM TBL UNION ALL
SELECT TBL.Des4 AS options FROM TBL UNION ALL
SELECT TBL.Des5  AS options FROM TBL UNION ALL
SELECT TBL.Des6  AS options FROM TBL UNION ALL
SELECT TBL.Des7 AS options FROM TBL UNION ALL
SELECT TBL.Des8 AS options FROM TBL UNION ALL
SELECT TBL.Des9 AS options FROM TBL UNION ALL
SELECT TBL.Des10 AS options FROM TBL UNION ALL
SELECT TBL.Des11 AS options FROM TBL UNION ALL
SELECT TBL.Des12  AS options FROM TBL UNION ALL
SELECT TBL.Des13  AS optionsFROM TBL) AS a

INTO TBL_OPTION_ALL
GROUP BY a.options;
于 2013-06-24T20:12:35.890 回答
1

语法倒退。它是

Select <your columns> 
Into <destination table> 
From <source table>

所以你应该有:

SELECT a.options, Count(*)
INTO TBL_OPTION_ALL
FROM(
SELECT TBL.Des1 AS options FROM TBL UNION ALL
SELECT TBL.Des2 AS options FROM TBL UNION ALL
SELECT TBL.Des3 AS options FROM TBL UNION ALL
SELECT TBL.Des4 AS options FROM TBL UNION ALL
SELECT TBL.Des5 AS options FROM TBL UNION ALL
SELECT TBL.Des6 AS options FROM TBL UNION ALL
SELECT TBL.Des7 AS options FROM TBL UNION ALL
SELECT TBL.Des8 AS options FROM TBL UNION ALL
SELECT TBL.Des9 AS options FROM TBL UNION ALL
SELECT TBL.Des10 AS options FROM TBL UNION ALL
SELECT TBL.Des11 AS options FROM TBL UNION ALL
SELECT TBL.Des12 AS options FROM TBL UNION ALL
SELECT TBL.Des13 AS options FROM TBL) AS a
GROUP BY a.options;
于 2013-06-24T20:50:45.723 回答
1

“AS 选项”需要在子查询中的列名之后,而不是表名之后。

更新

尝试这个:

SELECT a.options, Count(*)
INTO TBL_OPTION_ALL
FROM(
SELECT TBL.Des1 AS options FROM TBL UNION ALL
SELECT TBL.Des2 AS options FROM TBL UNION ALL
SELECT TBL.Des3 AS options FROM TBL UNION ALL
SELECT TBL.Des4 AS options FROM TBL UNION ALL
SELECT TBL.Des5 AS options FROM TBL UNION ALL
SELECT TBL.Des6 AS options FROM TBL UNION ALL
SELECT TBL.Des7 AS options FROM TBL UNION ALL
SELECT TBL.Des8 AS options FROM TBL UNION ALL
SELECT TBL.Des9 AS options FROM TBL UNION ALL
SELECT TBL.Des10 AS options FROM TBL UNION ALL
SELECT TBL.Des11 AS options FROM TBL UNION ALL
SELECT TBL.Des12 AS options FROM TBL UNION ALL
SELECT TBL.Des13 AS options FROM TBL) AS a
GROUP BY a.options;
于 2013-06-24T20:15:21.397 回答