2017-02-02 45 views
0

這對我剛纔的問題的後續問題:sql - min of 9 weeks max of 15 weeks average of 16 weeksSQL - 交叉表上需要澄清「q.type」 /爲平均/最小/最大聚集

我得到「輸入的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 
+0

你應該有'Type'列在UnionAggQ查詢中,你沒有它。另外「類型」是一個保留字,使用別名或將其括在方括號內 –

回答

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

哇!非常感謝你的一個很好的解釋:)它的工作! :) 豎起大拇指!! –