Group By複数のグループグループグループグループのグループグループグループのまとめ--GROPING SETS、GROUT BY CUBE、GROUTP BY ROLLUP、GROUTPING()、GROUTPING_ID()
4671 ワード
T-SQLの複数のグループには三つのGROPING SETS、CUBEがあります. また、ROLLUPは、CUBEとROLLUPがGROPING SETSの略字版として使用されても良いです.
サンプルデータベースのダウンロード:
http://files.cnblogs.com/files/haseo/TSQL2012.rar
GROUTPING SETS
あなたが設定したグループの一覧を表示します.
可能なグループのリスト
2. ( shipperid )
3. ( YES AR(shipped date) )
4. ( )
ROOUP
グループセットを階層的に表示する
2. ( shipcountry、 shipregion )
3. ( shipcountry )
4. ( )
GROUTPING()この関数は、持ち込まれた要素がグループの一部に属するかどうかを区別し、0を返して所属を表し、1は不属を表します.
GROUTPINGuID()
この関数は、パケット列のビットマップを返します.(バイナリを学んだ小仲間でも知っています.8421...これに類推します.)0であれば、すべてのパケットフィールドは、パケットの一部です.あるパケットフィールドがグループの一部ではないなら、対応する数字を返します.最後にまとめます.
以下のコードの場合、shipcountry、shipregion、shipcityはいずれもグループの一部であると0に戻ります. shipregionで、shipcityがグループ内にない場合、3(0+2+1)である.
サンプルデータベースのダウンロード:
http://files.cnblogs.com/files/haseo/TSQL2012.rar
GROUTPING SETS
あなたが設定したグループの一覧を表示します.
SELECT shipperid, YEAR(shippeddate) AS shipyear, COUNT(*) AS numorders
FROM Sales.Orders
GROUP BY GROUPING SETS
(
( shipperid, YEAR(shippeddate) ),
( shipperid ),
( YEAR(shippeddate) ),
( )
);
CUBE可能なグループのリスト
SELECT shipperid ,
YEAR(shippeddate) AS shipyear ,
COUNT(*) AS numorders
FROM Sales.Orders
GROUP BY CUBE(shipperid, YEAR(shippeddate));
1. ( shipperid、 YES AR(shipped date) ) 2. ( shipperid )
3. ( YES AR(shipped date) )
4. ( )
ROOUP
グループセットを階層的に表示する
SELECT shipcountry ,
shipregion ,
shipcity ,
COUNT(*) AS numorders
FROM Sales.Orders
GROUP BY ROLLUP(shipcountry, shipregion, shipcity);
1. ( shipcountry、 shipregion、 シプシティ ) 2. ( shipcountry、 shipregion )
3. ( shipcountry )
4. ( )
GROUTPING()この関数は、持ち込まれた要素がグループの一部に属するかどうかを区別し、0を返して所属を表し、1は不属を表します.
SELECT shipcountry ,
GROUPING(shipcountry) AS grpcountry ,
shipregion ,
GROUPING(shipregion) AS grpcountry ,
shipcity ,
GROUPING(shipcity) AS grpcountry ,
COUNT(*) AS numorders
FROM Sales.Orders
GROUP BY ROLLUP(shipcountry, shipregion, shipcity);
GROUTPINGuID()
この関数は、パケット列のビットマップを返します.(バイナリを学んだ小仲間でも知っています.8421...これに類推します.)0であれば、すべてのパケットフィールドは、パケットの一部です.あるパケットフィールドがグループの一部ではないなら、対応する数字を返します.最後にまとめます.
以下のコードの場合、shipcountry、shipregion、shipcityはいずれもグループの一部であると0に戻ります. shipregionで、shipcityがグループ内にない場合、3(0+2+1)である.
SELECT GROUPING_ID(shipcountry, shipregion, shipcity) AS grp_id ,
shipcountry ,
shipregion ,
shipcity ,
COUNT(*) AS numorders
FROM Sales.Orders
GROUP BY ROLLUP(shipcountry, shipregion, shipcity);