【问题标题】:sql - need clarification "q.type" on crosstab/aggregates for average/min/maxsql - 需要澄清交叉表/聚合上的“q.type”平均值/最小值/最大值
【发布时间】:2017-02-02 04:47:52
【问题描述】:

这是我上一个问题的后续问题:sql - min of 9 weeks max of 15 weeks average of 16 weeks

当我执行冻糕的真棒答案时,我得到“输入q.Type 的参数值”。

有人可以解释为什么以及如何替换/指定它吗?

我不想一直手动输入值..

下面是他的代码答案:

Crosstab2查询

TRANSFORM SUM(q.AggDetailQty)
SELECT q.ItemCode
FROM UnionAggQuery q
GROUP BY q.ItemCode
PIVOT **q.Type** IN ('AVG 16 WEEKS', 'MIN 9 WEEKS', 'MAX 15 WEEKS');

UnionAggQ 查询(连接两个交叉表)

下一个交叉表需要另一个查询作为源,特别是 ItemCode 与分类度量列的聚合的联合查询:

SELECT Detail.ItemCode,
       'AVG 16 WEEKS' AS Metric,
       AVG(Detail.Quantity) AS AggDetailQty
FROM Detail INNER JOIN Header ON Detail.SalesOrderNo = Header.SalesOrderNo
WHERE Header.OrderDate >= DATEADD("ww",-16, Date())
GROUP BY Detail.ItemCode

UNION ALL

SELECT Detail.ItemCode,
       'MIN 9 WEEKS' AS Metric,
       MIN(Detail.Quantity) AS AggDetailQty 
FROM Detail INNER JOIN Header ON Detail.SalesOrderNo = Header.SalesOrderNo
WHERE Header.OrderDate >= DATEADD("ww",-9, Date())
GROUP BY Detail.ItemCode

UNION ALL

SELECT Detail.ItemCode,
       'MAX 15 WEEKS' AS Metric,
       MAX(Detail.Quantity) AS AggDetailQty
FROM Detail INNER JOIN Header ON Detail.SalesOrderNo = Header.SalesOrderNo
WHERE Header.OrderDate >= DATEADD("ww",-15, Date())
GROUP BY Detail.ItemCode

最终查询

SELECT t1.*, t2.*
FROM CrossTab1 t1 
INNER JOIN CrossTab2 t2
ON t1.ItemCode = t2.ItemCode

【问题讨论】:

  • 您应该在 UnionAggQ 查询中有 Type 列,但您没有。 “类型”也是保留字,使用其他名称或用方括号括起来

标签: sql ms-access crosstab aggregates


【解决方案1】:

试试这个:

TRANSFORM SUM(q.AggDetailQty)
SELECT q.ItemCode
FROM UnionAggQuery q
GROUP BY q.ItemCode
PIVOT q.Metric IN ('AVG 16 WEEKS', 'MIN 9 WEEKS', 'MAX 15 WEEKS');

【讨论】:

  • 哇!非常感谢您的精彩解释:)它确实有效! :) 竖起大拇指!!
猜你喜欢
  • 2015-04-12
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 2023-04-03
  • 2017-12-15
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
相关资源
最近更新 更多