都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

便利な SQL の関数とか、構文とか、その他色々まとめてみる - その15 ( GROUPING して、ROLLUP で総計出してみる ) -

 本日は一年ぶりの金沢に出張です。新幹線が 2017年3月に開業してから、金沢駅周辺も賑わってますね。
www.pref.ishikawa.jp

 今日は石川県立音楽堂にて、ある学会に参加してます。
ongakudo.jp

 さて、今回はデータの合計を得るためのクエリを書いてみます。下記のクエリを SQL Server Management Studio で実行してみましょう。

SELECT 
    [製品名] = CASE WHEN (GROUPING(p.Name) = 1) THEN 
                   N'総合計'
               ELSE 
                   ISNULL(p.Name, 0)
               END,
    [オーダー数量] = SUM(OrderQty)
FROM 
    Sales.SalesOrderDetail sod
    INNER JOIN Production.Product p ON
    p.ProductID = sod.ProductID
GROUP BY 
    p.Name WITH ROLLUP
ORDER BY 
    p.Name

f:id:koogucc11:20161126151627p:plain

 通常このような結果を得るには、ある程度複雑なクエリを記述する必要がありますが、GROUPING と ROLLUP を使用すると簡単に記述することができます。

 結構、出張で訪れている金沢ですが、観光したことはほとんどありません。

るるぶ金沢 能登 加賀温泉郷'17 ちいサイズ (国内シリーズ小型)

るるぶ金沢 能登 加賀温泉郷'17 ちいサイズ (国内シリーズ小型)