2017-02-02 3 views
0

それは私の前の質問のためのフォローアップの質問です:私はとき「q.Typeのパラメータ値を入力し、」取得していますsql - min of 9 weeks max of 15 weeks average of 16 weeksSQL - 平均/分のクロス集計/集計上の必要性の明確化「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

うわー!素晴らしい説明をいただきありがとうございます:)それは動作します! :) いいぞ!! –

関連する問題