2014-11-01 58 views
0
SELECT    year(soh.OrderDate) 'year',sum(soh.TotalDue) 'Total',st.[Group] TerritoryGroup 
FROM     Sales.SalesOrderHeader soh 
LEFT OUTER JOIN  Sales.SalesTerritory st 
ON     soh.TerritoryID=st.TerritoryID 
GROUP BY    year(soh.OrderDate),(soh.TotalDue),[Group] 
ORDER BY    year(soh.OrderDate),(soh.TotalDue) 

這就是我想到的,但是這些年份是分散的,而不是每個地區總共一年。 (我喜歡在每個地區打印每年的總計) 是否有簡明的方法來製作此選擇語句?PRINT只在SQL中按年份(按地區分組)

+0

如果您想回答這個問題,您必須提供更多信息。一些示例數據或有關您需要的更多信息。 – Dominique 2014-11-01 11:02:07

+0

看起來她沒有足夠的分數來顯示樣本數據。我想她想要像年份 - 總共 - Terr作爲專欄。然後是2014 - 5000 - 德克薩斯州。所以,她希望德克薩斯州的所有數據都在一行上。如果我沒有錯誤 – Eda 2014-11-01 11:12:55

+0

@Eda:沒有什麼比「沒有足夠的點來顯示示例數據」。您可以隨時在請求中顯示樣本數據和預期結果。 – 2014-11-01 11:20:05

回答

2

如果你想每年一行,則僅包括在group by

SELECT year(soh.OrderDate) as year, sum(soh.TotalDue) as Total 
FROM Sales.SalesOrderHeader soh LEFT OUTER JOIN 
    Sales.SalesTerritory st 
    ON soh.TerritoryID = st.TerritoryID 
GROUP BY year(soh.OrderDate) 
ORDER BY year(soh.OrderDate); 

如果你想每年和領土組一行,然後只包括兩列:

SELECT year(soh.OrderDate) as year, sum(soh.TotalDue) as Total, st.[Group] as TerritoryGroup 
FROM Sales.SalesOrderHeader soh LEFT OUTER JOIN 
    Sales.SalesTerritory st 
    ON soh.TerritoryID = st.TerritoryID 
GROUP BY year(soh.OrderDate), [Group] 
ORDER BY year(soh.OrderDate), Total; 

一些注意事項:

  • 您不需要圍繞列別名的單引號。您應該只使用單引號字符串和日期常量。
  • 如果您只是按年進行彙總,那麼輸出中不能有TerritoryGroup
  • 在這兩種情況下,您都不會在group by中包含soh.TotalDue。您正在對該列進行求和,而不是由其進行彙總。
  • order by子句不應包含soh.TotalDue;它應該是彙總值(Total)。
+0

你的回答,戈登,看起來像她正在努力完成的。 =) – Eda 2014-11-01 20:16:10

+0

Gordon Linoff - 謝謝。我能夠使用你寫的第一個代碼得到確切的選擇。 – Exceli 2014-11-02 04:50:04

0

在GROUP BY中,你說你想要每年,每年總計和地區組合的一條線。

比方說你有這些記錄:

 
orderdate totaldue territorygroup 
2014-01-01 100  1 
2014-01-15 200  1 
2014-01-21 100  1 
2013-03-03 100  1 
2014-04-04 100  2 

然後你得到這些結果記錄:

 
year  totaldue territorygroup 
2014  100  1 
2014  200  1 
2013  100  1 
2014  100  2 

(BTW:SUM(soh.TotalDue)= soh.TotalDue,因爲你GROUP BY TotalDue。)

因此,您的解決方案是說您想在結果記錄中看到的內容。每______一個記錄。因此你得到你的GROUP BY子句和你想要的結果。

+0

謝謝。但是我按照年份(soh.OrderDate),(soh.TotalDue),[Group]分組 - 這些年份仍然不在一行。例如2013年有10個不同的行,例如 – Exceli 2014-11-01 11:22:16

+0

是的,每年(例如2013年)您會得到10個不同的行,但每年不會有10個不同的行 - totaldue-group組合(2013 - 100 - 1)。如果您希望每個*年有一個記錄*,則只能按*年*進行分組。 – 2014-11-01 11:24:26

+0

這是我按YEAR進行分組時得到的消息:列'Sales.Group'在選擇列表中無效,因爲 它不包含在聚合函數或GROUP BY子句中。 – Exceli 2014-11-01 11:36:23