为什么这个查询需要参数?

时间:2012-03-14 15:43:50

标签: sql ms-access

我在MS Access中有以下SQL查询。我正在尝试按标记为“响应”的列中包含的表达式的结果对输出进行排序。我的问题是,当我运行查询时,Access会提示我输入Response的参数值。我尝试输入零和一,看看会发生什么。查询在这些情况下运行,但排序顺序错误。有人可以向我解释为什么这个查询需要一个参数?我做错了吗?

SELECT Market,
       Sum(Calls) AS SumOfCalls,
       Sum([A25-54 IMPs] * 1000) AS Impressions,
       Round(SumOfCalls/Impressions, 6) AS Response
FROM DRTV_CentralOnly
WHERE [Creative]<>'#N/A'
GROUP BY Market
ORDER BY Response Desc;

2 个答案:

答案 0 :(得分:4)

不需要参数。问题是您在Response列中使用了列别名。您需要使用实际计算。

SELECT Market
    , Sum(Calls) AS SumOfCalls
    , Sum([A25-54 IMPs] * 1000) AS Impressions
    , Round(Sum(Calls)/Sum([A25-54 IMPs] * 1000), 6) AS Response
FROM DRTV_CentralOnly
WHERE [Creative]<>'#N/A'
GROUP BY Market
ORDER BY 4 Desc;

答案 1 :(得分:2)

@bluefeet说:

  

问题是您在“响应”列中使用了列别名。

实际上,这根本不是问题。 MS Access确实允许以{OP}使用它们的方式使用AS子句(“列别名”)。

相反,问题是MS Access不允许AS子句中的ORDER BY子句。

它正在改变ORDER BY子句以使用修复查询的序号位置。 SELECT子句的更改是红鲱鱼!

以下内容应该有效:

SELECT Market,
       Sum(Calls) AS SumOfCalls,
       Sum([A25-54 IMPs] * 1000) AS Impressions,
       Round(SumOfCalls/Impressions, 6) AS Response
FROM DRTV_CentralOnly
WHERE [Creative]<>'#N/A'
GROUP BY Market
ORDER BY 4 Desc;