【问题标题】:sql - min of 9 weeks max of 15 weeks average of 16 weekssql - 最少 9 周 最多 15 周 平均 16 周
【发布时间】:2017-02-02 01:37:26
【问题描述】:

这就是我想要查询的内容

  • 平均 16 周
  • 最少 9 周
  • 最多 15 周
  • 不按字母顺序增加月份

到目前为止,我的查询看起来像

我的代码是

TRANSFORM SUM(Detail.Quantity)
SELECT Detail.ItemCode
FROM Detail INNER JOIN Header ON Detail.SalesOrderNo = Header.SalesOrderNo
WHERE Header.OrderDate>=dateadd("m",-4,Date())
GROUP BY Detail.ItemCode
PIVOT MonthName(Month([Header.OrderDate]));

提前非常感谢您!

如果有人能回答为什么在 2017 年 2 月 1 日显示“十月”,我们将不胜感激?而我的代码有WHERE Header.OrderDate>=dateadd("m",-4,Date())?

【问题讨论】:

  • 四个月前的今天是10/1/2016
  • @Parfait 没错!谢谢你!!!您能否就我的其他问题发表意见?非常感谢!

标签: sql ms-access average


【解决方案1】:

考虑两个交叉表查询的连接。

CrossTab1查询(在PIVOT子句中指定列顺序)

TRANSFORM SUM(Detail.Quantity)
SELECT Detail.ItemCode
FROM Detail INNER JOIN Header ON Detail.SalesOrderNo = Header.SalesOrderNo
WHERE Header.OrderDate>=dateadd("m",-4,Date())
GROUP BY Detail.ItemCode
PIVOT MonthName(Month([Header.OrderDate]))
  IN ('November', 'December', 'January', 'February');

UnionAggQ 查询(另存为单独的查询)

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

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

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');

最终查询(加入两个交叉表)

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

【讨论】:

  • 非常感谢!你太棒了!!!谢谢你让我开心:) 希望你有一个美好的夜晚!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多