使用 ROLLUP 來摘要資料
http://technet.microsoft.com/zh-tw/library/ms189305(v=sql.90).aspx
例如,一個簡單的 Inventory 資料表包含了:
Item Color Quantity -------------------- -------------------- -------------------------- Table Blue 124 Table Red 223 Chair Blue 101 Chair Red 210
下列查詢將產生一個小計報告:
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL' ELSE ISNULL(Item, 'UNKNOWN') END AS Item, CASE WHEN (GROUPING(Color) = 1) THEN 'ALL' ELSE ISNULL(Color, 'UNKNOWN') END AS Color, SUM(Quantity) AS QtySum FROM Inventory GROUP BY Item, Color WITH ROLLUP Item Color QtySum -------------------- -------------------- -------------------------- Chair Blue 101.00 Chair Red 210.00 Chair ALL 311.00 Table Blue 124.00 Table Red 223.00 Table ALL 347.00 ALL ALL 658.00 (7 row(s) affected)
若查詢中的
ROLLUP
關鍵字變更成 CUBE
,CUBE
結果集將保持不變,但最後將傳回兩個額外的資料列:ALL Blue 225.00 ALL Red 433.00
使用 INSERT 與 SELECT 加入資料列
- 使用 VALUES 子句來指定一個資料列的資料值。例如:
INSERT INTO MyTable (PriKey, Description) VALUES (123, 'A description of part 123.');
如需詳細資訊,請參閱<使用 INSERT 和 Values 插入資料列>。 - 使用 SELECT 子查詢來指定一或多個資料列的資料值,例如:
INSERT INTO MyTable (PriKey, Description) SELECT ForeignKey, Description FROM SomeView;
如需詳細資訊,請參閱<使用 INSERT 和 SELECT 子查詢插入資料列>
若要利用其他資料表的值建立新資料表,您可以使用 SELECT INTO。例如:
SELECT LastName, FirstName, Phone INTO dbo.PhoneList492 FROM dbo.Customers WHERE Phone LIKE '492%'
如需詳細資訊,請參閱<使用 SELECT INTO 插入資料列>。
使用 UNION 合併結果集
UNION 將指定成:
select_statement UNION [ALL] select_statement
此查詢將在資料表之間建立 UNION:
SELECT * FROM Table1 UNION SELECT * FROM Table2
根據預設,SQL Server 2005 會由左至右評估包含 UNION 運算子的陳述式。您可使用括號來指定評估的順序。例如,下列陳述式並不相等:
/* First statement. */ SELECT * FROM TableA UNION ALL ( SELECT * FROM TableB UNION SELECT * FROM TableC ) GO /* Second statement. */ (SELECT * FROM TableA UNION ALL SELECT * FROM TableB ) UNION SELECT * FROM TableC) GO
搭配 ROLLUP、CUBE 和 GROUPING SETS 使用 GROUP BY
使用 ROLLUP 和 CUBE 運算子的查詢,會產生某些與 OLAP 應用程式相同的結果集,並執行某些相同的計算。CUBE 運算子會產生可用於跨表格式報表的結果集。ROLLUP 運算可計算相當於 OLAP 維度或階層架構的結果。
例如,給定具有年、月,以及日階層或屬性的時間維度,下列 ROLLUP 運算會產生下列群組。
運算
|
群組
|
---|---|
ROLLUP (DATEPART(yyyy,OrderDate) ,DATEPART(mm,OrderDate) ,DATEPART(dd,OrderDate)) |
year, month, day
year, month
year
()
|
給定串連年、月,以及日層級的時間維度,並同時具有地區和城市層級的位置維度的下列 ROLLUP 作業,會輸出下列群組。
運算
|
群組
|
---|---|
ROLLUP (region, city), ROLLUP (DATEPART(yyyy,OrderDate) ,DATEPART(mm,OrderDate) ,DATEPART(dd,OrderDate)) |
region, city, year, month, day
region, city, year, month
region, city, year
region, city
region, year, month, day
region, year, month
region, year
region
year, month, day
year, month
year
()
|
位置與時間維度皆為同樣層級的 CUBE 作業,會輸出下列群組。
select case when grouping(Dept)=1 then N'合計' else isnull(StaffNumber,'') end '員工編號', case when grouping(StaffNumber)=1 and grouping(Dept)=0 then N'小計' else isnull(Dept,'') end '部門', sum(pay) as '年薪' from GirdTest group by Dept,StaffNumber with rollup
使用 INSERT 與 SELECT 加入資料列
http://technet.microsoft.com/zh-tw/library/ms188263(v=sql.105).aspx
http://mobile.dotblogs.com.tw/kyleshen/archive/2013/09/27/120926.aspx
http://kyleap.blogspot.tw/2013/09/aspnetgridview-sql.html
沒有留言:
張貼留言