fhg
Volume 8, Volume 11 -- March 19, 2008

Grouping a Union

Published: March 19, 2008

Hey, Ted:

We have several sales history files--one for each year. When I need to combine data for more than one year, I have to use an SQL UNION. I am trying to group "unioned" data and can't seem to get it right. Is it possible to group a dataset that is built by a union?

--Tom


This appears to be an easy problem to resolve, but appearances can be deceiving. If you're not careful, you can get the wrong results when you UNION two or more tables, especially when you're summarizing data.

Divide the query into two steps: one to union the data, the other to group it. Assuming you have two files, one for the current year and one for the previous year, here's one possibility.

WITH Sales AS 
(SELECT Customer, Item, QtyShipped, UnitPrice
  FROM CurrYear
UNION ALL
 SELECT Customer, Item, QtyShipped, UnitPrice
  FROM PrevYear
)
SELECT Customer, Item, SUM(QtyShipped), 
       SUM(QtyShipped * UnitPrice)
  FROM Sales
 GROUP by Customer, Item
 ORDER BY Customer, Item;

The WITH defines a common table expression, which creates a temporary table of the combined data. This temporary table is called SALES. Notice I used UNION ALL, not UNION, so duplicate rows would not be omitted. The last SELECT summarizes the combined data on customer and item number.

Here's another query that gives the same results. It summarizes each file, then summarizes the two summaries. I doubt this method is any better than the first one.

WITH SalesSummary AS 
(SELECT Customer, Item, SUM(QtyShipped) AS qty,
       SUM(QtyShipped * UnitPrice) AS sale  
  FROM CurrYear
 GROUP by Customer, Item
UNION ALL
 SELECT Customer, Item, SUM(QtyShipped) AS qty,
       SUM(QtyShipped * UnitPrice) AS sale  
  FROM PrevYear
 GROUP by Customer, Item)
SELECT Customer, Item, SUM(qty), SUM(sale) FROM SalesSummary
GROUP by Customer, Item
ORDER BY Customer, Item;

I googled and found a similar question at http://joecelkothesqlapprentice.blogspot.com/. I based the following SQL query on Joe Celko's answer.

SELECT sale.Customer, sale.Item, 
       SUM(sale.QtyShipped), 
       SUM(sale.QtyShipped * sale.UnitPrice)
  FROM
   (SELECT Customer, Item, QtyShipped, UnitPrice
      FROM CurrYear
     UNION ALL
    SELECT Customer, Item, QtyShipped, UnitPrice
      FROM PrevYear) AS sale
 GROUP by Customer, Item
 ORDER BY Customer, Item;

This query differs from the first example in that the union has been embedded in the FROM clause.

BTW, in an ideal world, all sales history would be stored in one big file and transactions would be extracted by date. I find it more practical to keep separate files of history. It appears to me that many other people think the same.

--Ted


RELATED STORIES

Weird SQL Union Results

Time for a Common Table Expression, Part 2



                     Post this story to del.icio.us
               Post this story to Digg
    Post this story to Slashdot


Sponsored By
HELP/SYSTEMS

SEQUEL is the single solution for all your System i business intelligence needs.

                                                          · Executive Dashboards
                                                          · Graphical Query and Reporting
                                                          · Drill-Down Data Analysis
                                                          · Multi-Platform Database Access
                                                          · E-Mail Report and File Distribution
                                                          · Secure Web Access

Rely on SEQUEL to meet all your System i data access requirements.

Visit our Web site at http://www.helpsystems.com/400g


Senior Technical Editor: Ted Holt
Technical Editors: Howard Arner, Joe Hertvik, Shannon O'Donnell, Kevin Vandever
Contributing Technical Editors: Joel Cochran, Wayne O. Evans, Raymond Everhart,
Bruce Guetzkow, Brian Kelly, Marc Logemann, David Morris
Publisher and Advertising Director: Jenny Thomas
Advertising Sales Representative: Kim Reed
Contact the Editors: To contact anyone on the IT Jungle Team
Go to our contacts page and send us a message.

Sponsored Links

COMMON:  Join us at the annual 2008 conference, March 30 - April 3, in Nashville, Tennessee
LANSA:  It's Time for 4 days of education at the LANSA User Conference, May 4 – 7, in Orlando
MoshiMoshi:  An Interactive Experience for the System i Community. Coming March 30.


 

IT Jungle Store Top Book Picks

Easy Steps to Internet Programming for AS/400, iSeries, and System i: List Price, $49.95
Getting Started with PHP for i5/OS: List Price, $59.95
The System i RPG & RPG IV Tutorial and Lab Exercises: List Price, $59.95
The System i Pocket RPG & RPG IV Guide: List Price, $69.95
The iSeries Pocket Database Guide: List Price, $59.00
The iSeries Pocket Developers' Guide: List Price, $59.00
The iSeries Pocket SQL Guide: List Price, $59.00
The iSeries Pocket Query Guide: List Price, $49.00
The iSeries Pocket WebFacing Primer: List Price, $39.00
Migrating to WebSphere Express for iSeries: List Price, $49.00
iSeries Express Web Implementer's Guide: List Price, $59.00
Getting Started with WebSphere Development Studio for iSeries: List Price, $79.95
Getting Started With WebSphere Development Studio Client for iSeries: List Price, $89.00
Getting Started with WebSphere Express for iSeries: List Price, $49.00
WebFacing Application Design and Development Guide: List Price, $55.00
Can the AS/400 Survive IBM?: List Price, $49.00
The All-Everything Machine: List Price, $29.95
Chip Wars: List Price, $29.95


 
The Four Hundred
Bye Bye System p and i, Hello Power Systems

The HP Pitch on Rehosting i5/OS Applications on Integrity

NetManage and Rocket Software Call Off Acquisition Deal

As I See It: Bringing the Funny

HPC Sales Account for Most of 2007's Server Sales Growth

The Linux Beacon
Intel Talks Up X64, Itanium Roadmaps Ahead of IDF

Red Hat Releases Enterprise Linux 5.2 Beta

HP Goes Big Iron with Eight-Socket Opteron Box

As I See It: Bringing the Funny

Bye Bye System p and i, Hello Power Systems

Four Hundred Stuff
iQ4bis Aims to Simplify BI for JD Edwards Shops

LogLogic Launches Appliances for the Mid Market

EXTOL Adds Dashboard Views to EDI Software

CMDB: A Journey, Not a Destination

Help/Systems Updates Robot/REPLAY

Big Iron
Making the Case for System z10 Server Consolidation

Top Mainframe Stories From Around the Web

Chats, Webinars, Seminars, Shows, and Other Happenings

System i PTF Guide
March 15, 2008: Volume 10, Number 11

March 8, 2008: Volume 10, Number 10

March 1, 2008: Volume 10, Number 9

February 23, 2008: Volume 10, Number 8

February 16, 2008: Volume 10, Number 7

February 9, 2008: Volume 10, Number 6

The Windows Observer
Microsoft Patches 12 Critical Flaws in Office

AMD Says Barcelona Bug Is Fixed, Almost Ready to Ramp

IBM Hurls $1 Billion at Unified Communications Target

Mad Dog 21/21: Plane's Peeking

OpenXML-ODF Interoperability Goal of Microsoft Initiative

The Unix Guardian
Sun Readies Dual-Socket Sparc T2+ Servers

IBM Readies Big Power6 Boxes, New X64 Servers

HPC Sales Account for Most of 2007's Server Sales Growth

Server Virtualization and Consolidation Require More Resiliency

Arrow Buys French Midrange Distributor

Four Hundred Monitor
Four Hundred Monitor's
Full iSeries Events Calendar

THIS ISSUE SPONSORED BY:

Help/Systems
Guild Companies
WorksRight Software


Printer Friendly Version


TABLE OF CONTENTS
Grouping a Union

Remember the Allocation

Stopping User from Using the System Request Menu

Four Hundred Guru

BACK ISSUES

From the IT Jungle Forums
Data Type *DEC in MSGF

How to identify when the OS upgrade was performed ???

FTP in arrival sequence

S36 environment problem

QSH won't write in batch!





 
Subscription Information:
You can unsubscribe, change your email address, or sign up for any of IT Jungle's free e-newsletters through our Web site at http://www.itjungle.com/sub/subscribe.html.

Copyright © 1996-2008 Guild Companies, Inc. All Rights Reserved.
Guild Companies, Inc., 50 Park Terrace East, Suite 8F, New York, NY 10034

Privacy Statement