SQL統計——按照各種維度


在SQLserver中可以按照各種維度進行統計,實現與EXCLE一樣強大的功能。

--==========================
--Blog:<奔跑的金魚>
--Desc:<SQL統計>
--Date:<2015-01-07>
--==========================
/*描述:不同員工在不同時間參加不同項目組中,獲得的收入*/
IF EXISTS(SELECT * FROM sysobjects where ID=OBJECT_ID(N'tb_Income') and XTYPE='U')
DROP TABLE tb_Income

CREATE TABLE [tb_Income]
(
  [TeamID] int not null,  
  [PName]  Nvarchar(20) NOT NULL,  
  [CYear]  Smallint NOT NULL,  
  [CMonth] TinyInt NOT NULL,  
  [CMoney] Decimal (10,2) Not Null 
)

---------------------插入測試數據
INSERT [dbo].[tb_Income]  
SELECT 1,'荊天明',2011,2,5600  
union ALL SELECT 1,'荊天明',2011,1,5678  
union ALL SELECT 1,'荊天明',2011,3,6798  
union ALL SELECT 2,'荊天明',2011,4,7800  
union ALL SELECT 2,'荊天明',2011,5,8899  
union ALL SELECT 3,'荊天明',2012,8,8877  
 
union ALL SELECT 1,'高月',2011,1,3455  
union ALL SELECT 1,'高月',2011,2,4567  
union ALL SELECT 2,'高月',2011,3,5676  
union ALL SELECT 3,'高月',2011,4,5600  
union ALL SELECT 2,'高月',2011,5,6788  
union ALL SELECT 2,'高月',2012,6,5679  
union ALL SELECT 2,'高月',2012,7,6785  
 
union ALL SELECT 2,'端木蓉',2011,2,5600  
union ALL SELECT 2,'端木蓉',2011,3,2345  
union ALL SELECT 2,'端木蓉',2011,5,12000  
union ALL SELECT 3,'端木蓉',2011,4,23456  
union ALL SELECT 3,'端木蓉',2011,6,4567  
union ALL SELECT 1,'端木蓉',2012,7,6789  
union ALL SELECT 1,'端木蓉',2012,8,9998  
 
union ALL SELECT 3,'高漸離',2011,7,6798  
union ALL SELECT 3,'高漸離',2011,10,10000  
union ALL SELECT 3,'高漸離',2011,9,12021  
union ALL SELECT 2,'高漸離',2012,11,8799  
union ALL SELECT 1,'高漸離',2012,12,10002  
 
union ALL SELECT 3,'少司命',2011,8,7896  
union ALL SELECT 3,'少司命',2011,9,7890  
union ALL SELECT 2,'少司命',2011,10,7799  
union ALL SELECT 2,'少司命',2011,11,9988  
union ALL SELECT 2,'少司命',2012,9,34567  
union ALL SELECT 3,'少司命',2012,12,5609 

--------------------------------查詢表中數據

select * from tb_Income

/*CUBE運算符生成的結果集是多維數據集,多維數據集是事實數據的擴展,事實數據即記錄個別時間的數據,擴展建立在用戶准備分析的列上,這些列被稱為維,多維數據集是一個結果集,其中包含各緯度所有可能的交叉表格*/

------------------------------使用單個維度進行統計
SELECT PName as 員工姓名,  
SUM(CMoney) 總收入  
FROM tb_Income  
GROUP BY CUBE (PName) 
------------------------------使用多個維度進行統計
SELECT TeamID As 項目組編號,PName as 員工姓名,  
SUM(CMoney) 總收入  
FROM tb_Income  
GROUP BY CUBE (PName,TeamID)  

上面是按照CUBE進行統計的,接下來是使用ROLLUP進行統計

 -------------------------------使用ROLLUP進行統計
SELECT TeamID As 項目組編號,PName as 員工姓名,  
SUM(CMoney) 總收入  
FROM tb_Income  
GROUP BY ROLLUP (PName,TeamID) 

  • CUBE 生成的結果集顯示了所選列中值的所有組合的聚合。
  • ROLLUP 生成的結果集顯示了所選列中值的某一層次結構的聚合。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM