2014年9月11日 星期四

SQL_摘要資料、insert select、合併結果、小計


使用 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 關鍵字變更成 CUBECUBE 結果集將保持不變,但最後將傳回兩個額外的資料列:
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 作業,會輸出下列群組。

http://mobile.dotblogs.com.tw/kyleshen/archive/2013/09/27/120926.aspx
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

沒有留言: