2014-11-01 53 views
1
SELECT   YEAR(OrderDate) 'Year', SUM(TotalDue) 
FROM   Sales 
GROUP BY  OrderDate 
Order BY  OrderDate 

如何將每年添加爲一行? 我寫了上面的查詢,但結果仍然以TotalDue Year爲單個行。 例如你如何在SQL中按年份分組行數SUM

enter image description here

+0

請標註的關係數據庫管理系統你使用。 – SQLMason 2017-05-16 12:57:41

回答

2

你應該GROUP BY年,訂購日期不:

SELECT   YEAR(OrderDate), SUM(TotalDue) 
FROM   Sales 
GROUP BY  YEAR(OrderDate) 
Order BY  OrderDate 
+0

由於查詢邏輯過程,無法在GROUP中使用別名 – sqluser 2014-11-01 09:33:03

+0

DId不起作用。錯誤:每個GROUP BY表達式都必須包含至少一個不是外部引用的列。 – Eda 2014-11-01 09:33:22

+1

@Eda只提供一年即'YEAR(訂購日期)別名 '由我們YEAR''和組'YEAR(訂購日期)' OR 您可以轉換日期格式,比如'DATEPART(YYYY,訂購日期)' YEAR ''和'DATEPART(yyyy,OrderDate)' – 2014-11-01 09:47:38

0
SELECT   YEAR(OrderDate) 'Year', SUM(TotalDue) 
FROM   Sales 
GROUP BY  YEAR(OrderDate) 
1

你應該訂單日期的年份組,但沒有訂購日期本身。

SELECT   YEAR(OrderDate) AS `Year`, SUM(TotalDue) 
FROM   Sales 
GROUP BY  YEAR(OrderDate) 
Order BY  Year 
+0

謝謝安德烈。我根據您的意見創建了正確的答案。只刪除最後一行,因爲它產生了此錯誤消息:由於ORDER BY 子句中的列「Sales.OrderDate」未包含在聚合函數或GROUP BY子句中,因此無效。 – Eda 2014-11-01 09:38:31

+1

@Eda如果有效,請接受答案 – 2014-11-01 09:54:13

0

您需要重新分組結果

 
SELECT y, Sum(s) from 
    (
    SELECT   YEAR(OrderDate) as y , SUM(TotalDue) as s 
    FROM   Sales 
    GROUP BY  OrderDate 
) 
group by y 
Order BY y 
3

你必須在GROUP問題BY語句,因爲它在選定的列進行操作:

SELECT YEAR(OrderDate) theYear, SUM(Due) TotalDue 
FROM Sales 
GROUP BY theYear --Here you can either order by TotalDue or by theYear, 
       -- otherwise you will get the errors you mentioned 
+0

'GROUP BY theYear'不起作用。 – 2014-11-01 09:59:09

+0

@VDohnal只要在選定的列上執行GROUP BY,這就是我的情況。 – 2014-11-01 10:08:05

+0

檢查http://sqlfiddle.com/#!4/60741/1 – 2014-11-01 10:11:03