2016-10-30 62 views
0

我有下面的代碼,Teradata將無法正常工作,並以「選定的非聚合值必須是關聯組的一部分」的形式返回消息。我想我已經確保所有非聚合字段已經放入GROUP BY子句中。你能幫我看看爲什麼它不起作用嗎?Teradata SQL與GROUP BY中的非聚合字段

SELECT str.store,str.city, str.state, dep.deptdesc, 100*(Clean.DecSales/Clean.DecSaleDays-Clean.NovSales/Clean.NovSaleDays)/(Clean.NovSales/Clean.NovSaleDays) AS PercentageChange 

FROM ((skuinfo sku LEFT JOIN deptinfo dep ON sku.dept=dep.dept) 

LEFT JOIN 
(SELECT t.sku, t.store, COUNT(DISTINCT t.saledate) AS NumOfDays, SUM(t.amt) AS DailyTotal, 

(CAST(EXTRACT(YEAR FROM t.saledate) AS VARCHAR(8)))||'.'|| 
     (CAST(EXTRACT(MONTH FROM t.saledate) AS VARCHAR(8)))||'.'|| 
     (CAST(t.store AS VARCHAR(8)))AS ComboID, 

SUM(CASE WHEN EXTRACT(MONTH from t.saledate) =11 THEN t.Amt END) AS NovSales, 

SUM(CASE WHEN EXTRACT(MONTH from t.saledate) =12 THEN t.Amt END) AS DecSales, 

COUNT(CASE WHEN EXTRACT(MONTH from t.saledate) =11 THEN t.saledate END) AS NovSaleDays, 

COUNT(CASE WHEN EXTRACT(MONTH from t.saledate) =12 THEN t.saledate END) AS DecSaleDays 

FROM trnsact t 

WHERE (t.saledate NOT BETWEEN '2005-08-01' AND '2005-08-31') AND t.stype='P' 

GROUP BY t.sku, t.store 

HAVING NumOfDays>19) Clean 

ON sku.sku=Clean.sku) 

LEFT JOIN strinfo str ON str.store=Clean.store 

GROUP BY str.store,str.city, str.state, dep.deptdesc; 
+0

將表達式PercentageChange放入SUM中或放入GROUP BY中。 – Mihai

回答

0

刪除外部查詢中的GROUP BY。將派生表Clean中的GROUP BY替換爲序號GROUP BY 1, 2, 5

東西使我相信派生表的列ComboID,由SaleDateStoreID因爲SaleDate不是GROUP BY的一部分,但在派生表的集合別處參加。

1

這是您的SELECT

SELECT str.store, str.city, str.state, dep.deptdesc, 
     (100*(Clean.DecSales/Clean.DecSaleDays-Clean.NovSales/Clean.NovSaleDays)/(Clean.NovSales/Clean.NovSaleDays)) AS PercentageChange 

這是您的GROUP BY

GROUP BY str.store, str.city, str.state, dep.deptdesc 

我看到很多列引用在SELECT不在的GROUP BY。我猜想,你想要麼SELECT這樣的:

SELECT str.store, str.city, str.state, dep.deptdesc, 
     SUM(100*(Clean.DecSales/Clean.DecSaleDays-Clean.NovSales/Clean.NovSaleDays)/(Clean.NovSales/Clean.NovSaleDays) 
     ) AS PercentageChange 

還是沒有GROUP BY在所有外部查詢。