首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql -最少9周,最长15周,平均16周

sql -最少9周,最长15周,平均16周
EN

Stack Overflow用户
提问于 2017-02-02 01:37:26
回答 1查看 45关注 0票数 0

这就是我所想要的

  • 平均16周
  • 最少9周
  • 最多15周
  • 增加月份而不是字母

到目前为止,我的查询如下

我的代码是

代码语言:javascript
复制
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())

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-02 03:43:53

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

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

代码语言:javascript
复制
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与分类度量列合并的聚合查询:

代码语言:javascript
复制
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查询

代码语言:javascript
复制
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');

最终查询(连接两个交叉数据库)

代码语言:javascript
复制
SELECT t1.*, t2.*
FROM CrossTab1 t1 
INNER JOIN CrossTab2 t2
ON t1.ItemCode = t2.ItemCode
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41992912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档