fhg
Volume 9, Number 9 -- March 11, 2009

Treasury of new DB2 6.1 Features, Part 2: Grouping Sets and Super Groups

Published: March 11, 2009

by Michael Sansoterra

Part 1 of this series focused on some of the stellar query enhancements IBM gave its DB2 for i developer community. It's hard to believe the 20-plus-year-old AS/400 system (now called IBM i) can continue to look so young given its great strengths in database and other areas. But for now, I want to focus on specialized query enhancements called grouping sets and super groups.

The ability to work with grouping sets and super groups in a query is an overdue feature, in my opinion (which incidentally has long been available with other versions of DB2 and other database servers). This nifty enhancement gives developers a simple way to include summary rows within their query's result set.

To illustrate, let's start with a simple example. Say we have a view called "vwSalesOrderInfo" that contains order summary information:


ORDERDATE

TIMESTAMP

 

SALESPERSONID

INTEGER

 

SALES_PERSON

VARGRAPHIC

102

TERRITORYID

INTEGER

 

TERRITORY

VARGRAPHIC

50

CUSTOMERID

INTEGER

 

CUSTOMER

VARGRAPHIC

50

SUBTOTAL

DECIMAL

19,4

TAXAMT

DECIMAL

19,4

FREIGHT

DECIMAL

19,4

TOTALDUE

DECIMAL

19,4


For clarification, the hierarchy of data is Customers are within a territory, and territories are within the jurisdiction of a sales person. And just for the record, I took this sample data from Microsoft's AdventureWorks SQL Server sample database and put it on DB2.

From a business intelligence (BI) standpoint, we could ask several questions about this data, such as:

  1. What are the company's total sales for all orders stored in the system?
  2. What is the total order value (excluding tax, freight) for each customer?
  3. What is the total order value (excluding tax, freight) for each territory?
  4. What is the total order value (excluding tax, freight) for each sales rep?
  5. What is the total order value (excluding tax, freight) for each year?
  6. What is the average order value by customer?
  7. Which customers grew in sales from one year to the next?
  8. Which customers dropped in sales from one year to the next?
  9. What are the peak sales months of the year?
  10. What is each sales rep's average order value?
  11. Which territories incur the largest freight charges?
  12. Which territories incur the largest sales tax collection?

Of course we could continue to ask many more questions from the data at hand.

We can easily answer the first question "What are the total sales for all orders?" using the following query:

Select Sum(SubTotal) As OrderValue From vwSalesOrderInfo

That query will return the value: 127337180.1126

We can easily answer the second question "what is the total order value (excluding tax, freight) for each customer?" using the following query:

Select Customer,Sum(SubTotal) As OrderValue
  From vwSalesOrderInfo
Group By Customer
Order By Customer

Partial formatted results for this query look like the following:


Customer

OrderValue

A Bike Store

$ 102,351.80

A Great Bicycle Company

$ 10,256.08

A Typical Bike Shop

$ 100,227.71

Acceptable Sales & Service

$ 1,510.05

Accessories Network

$ 2,711.33

Acclaimed Bicycle Company

$ 4,735.81

Ace Bicycle Supply

$ 4,422.64

Active Cycling

$ 1,691.26

Active Systems

$ 328.80

Active Transport Inc.

$ 102,029.76

Activity Center

$ 51,534.07

Advanced Bike Components

$ 188,367.91

 

We can answer questions 3 through 5 in the same way by simply "changing out" the column to "summarize by" in the SELECT, GROUP BY, and ORDER BY clauses. For instance, instead of summarizing by Customer, we can summarize by territory.

Now, what if we wanted to combine all of this information and answer all these questions in a single query? Couldn't we simply expand the query to summarize by all combinations as follows?

  Select Year(OrderDate) As OrderYear,Sales_Person,
         Territory,Customer,Sum(SubTotal) As OrderValue
    From vwSalesOrderInfo 
Group By Year(OrderDate),Sales_Person,Territory,Customer
Order By OrderYear,Sales_Person,Territory,Customer

This modified query answered all of our questions--or did it? Actually, it didn't because the summaries given by this query offer summaries at the lowest "group" or "break" level. In this case it's still the customer column. What we're really looking for though is the ability to add additional "summary rows" in our result set that summarize the data by each of the grouping levels.

To accomplish this, we could add subtotal to the above query by using a Common Table Expression (CTE) and including some UNION ALL statements to combine the total rows sets into detail data. We'd also probably need to do a few ORDER BY tricks to ensure the subtotal rows are placed in the proper sequence within the detail rows of the result set.

This is where the super group concept comes into play. A super group will add summary rows to our query for each column or expression in the GROUP BY clause. For us old-time COBOL and RPG programmers, this is akin to "control break" totals. This new summary function is implemented by adding the WITH ROLLUP keywords to the GROUP BY clause:

  Select Year(OrderDate) As OrderYear,Sales_Person,
         Territory,Customer,Sum(SubTotal) As OrderValue
    From vwSalesOrderInfo 
Group By Year(OrderDate),Sales_Person,Territory,Customer
With Rollup  /* Implement Super Groups */
Order By OrderYear,Sales_Person,Territory,Customer

Here is a subset of the query's results:


Year

Sales Person

Territory

Customer

Order Value

2001

Ansman-Wolfe, Pamela

Northwest

A Bike Store

$ 36,862.09

2001

Ansman-Wolfe, Pamela

Northwest

Alternative Vehicles

$ 3,620.80

2001

Ansman-Wolfe, Pamela

Northwest

Capable Sales and Service

$ 98,816.82

2001

Ansman-Wolfe, Pamela

Northwest

Moderately-Priced Bikes Store

$ 17,081.92

2001

Ansman-Wolfe, Pamela

Northwest

Nonskid Tire Company

$ 891.20

2001

Ansman-Wolfe, Pamela

Northwest

Outdoor Sports Supply

$114,031.65

2001

Ansman-Wolfe, Pamela

Northwest

Raw Materials Inc

$ 91,675.02

2001

Ansman-Wolfe, Pamela

Northwest

Scooters and Bikes Store

$100,231.96

2001

Ansman-Wolfe, Pamela

Northwest

Some Discount Store

$ 99,973.77

2001

Ansman-Wolfe, Pamela

Northwest

Thorough Parts and Repair Services

$ 81,011.49

2001

Ansman-Wolfe, Pamela

Northwest

Vast Bike Sales and Rental

$ 85,457.61

2001

Ansman-Wolfe, Pamela

Northwest

-

$729,654.32

2001

Ansman-Wolfe, Pamela

-

-

$729,654.32

 

The rows with the purple cells are summary rows added to the query results compliments of ROLLUP. Each purple cell actually contains a NULL, which is how ROLLUP behaves for the column or group of columns it is summarizing. The first summarized row tells us that the total order value for sales rep "Pamela Ansman-Wolfe" within the Northwest territory region is about $730K. The next row indicates that Ansman-Wolfe sold the same amount for all territories. (In this case, this rep has only one territory.)

If we look further down the result set we'll see similar summary rows added after each change in territory, sales person, and year. Finally, ROLLUP courteously gives us a grand total row as well. Here are the last few rows of the result set:


Year

Sales Person

Territory

Customer

Order Value

2004

Varkey Chudukatil, Ranjit

France

Wheels Inc.

$ 440.17

2004

Varkey Chudukatil, Ranjit

France

-

$ 1,658,518.07

2004

Varkey Chudukatil, Ranjit

-

-

$ 1,658,518.07

2004

-

-

-

$ 29,137,477.01

-

-

-

-

$127,337,180.11

 

Again, the first row is part of the normal query and the remaining rows containing purple cells represent the "super group" rows. It's easy to follow the summarization rows as they follow the hierarchy of the GROUP BY columns.

This feature is useful, for instance, in reporting applications that require subtotal and grand total lines. And if you've ever given a user a raw data report in Excel, it's usually been up to the user to aggregate the data. Using ROLLUP in this situation will save users that extra step of adding totals themselves.

One question that may have surfaced at this point is: Can DB2 distinguish between the special "super group" summary row and a "normal" row in the result set? A first guess might be to assume rows with NULLs in a GROUP BY column are super group rows. However, testing for NULLs as a super group row will only work when it is guaranteed that the GROUP BY column values will never legitimately contain a NULL.

Fortunately, DB2 gives us a better way to test for a super group row with a new aggregate function called GROUPING. The GROUPING function accepts a single parameter containing the name of a column expression in the GROUP BY clause. The function will return a "0" if it's a normal query result row or a "1" if the row is a super group summary row (at the level of the column expression specified). For instance, if we want to know if a row is a super group at the Territory level, we can test it with the following CASE expression:

Case When Grouping(Territory)=0
   Then Territory
   Else 'Sales Person Total: ' End As Territory,

This expression will either put the Territory name in the Territory column for normal rows, or it will display the constant "Sales Person Total" in the column when it is part of a super group row.

Unfortunately (and I think this is probably a bug), the expression in the GROUP BY clause doesn't work as it should. You will find that using the following expression will return an error:

Case When Grouping(Year(OrderDate))=0
     Then Cast(Year(OrderDate) As Char(4))
     Else 'Grand Total: ' End As OrderYear,

The V6R1 SQL Reference manual implied that a GROUP BY expression is legitimate parameter for GROUPING. One way around this problem would simply be to define a view or common table expression on the base data and convert the expression Year(OrderDate) into a column of its own.

Here is a query definition that makes use of the grouping function to show "Total" constants within the super group rows instead of leaving the cells null:

With BaseData As (
  Select Year(OrderDate) As OrderYear,
         Sales_Person,
         Territory,Customer,
         Sum(SubTotal) As OrderValue,
         Grouping(Sales_Person) As SalesPersonBreak,
         Grouping(Territory) As TerritoryBreak,
         Grouping(Customer) As CustomerBreak
    From vwSalesOrderInfo 
Group By Year(OrderDate),Sales_Person,Territory,Customer
With Rollup
Order By OrderYear,Sales_Person,Territory,Customer)
Select OrderYear,
       Case When SalesPersonBreak=0
            Then Sales_Person
            Else 'Year Total'  As Sales_Person,
       Case When TerritoryBreak=0
            Then Territory
            Else 'Sales Rep Total' As Territory,
       Case When CustomerBreak=0
            Then Customer
            Else 'Territory Total' As Customer,
       OrderValue
  From BaseData

A common table expression (CTE) is required in this case because we need the CTE to sort the base data appropriately and then insert the summary rows appropriately into the sorted data. Otherwise, the constant we specify within our GROUP BY columns would potentially make the ORDER BY clause sort the rows incorrectly.

The CUBE Function

A second type of super group involves the concept of the CUBE, which is like ROLLUP on steroids. Whereas ROLLUP creates a summary row for each break level (from lowest order to highest), CUBE creates several summary rows for the various combinations of distinct values within the columns of the GROUP BY clause.

Continuing with our previous example, say we specify WITH CUBE in the GROUP BY clause instead of WITH ROLLUP:

  Select Year(OrderDate) As OrderYear,Sales_Person,
         Territory,Customer,Sum(SubTotal) As OrderValue
    From vwSalesOrderInfo 
Group By Year(OrderDate),Sales_Person,Territory,Customer
With Cube /* Implement Super Groups */
Order By OrderYear,Sales_Person,Territory,Customer

In addition to the normal rows produced by the query, shown below is a sample of the summary rows created by the WITH CUBE option:


Year

Sales Person

Territory

Customer

Order Value

2004

Varkey Chudukatil, Ranjit

-

Sports Products Store

$38.95

2004

Varkey Chudukatil, Ranjit

-

Steel Inc.

$40,844.30

2004

Varkey Chudukatil, Ranjit

-

The Bike Outlet

$65,383.71

2004

Varkey Chudukatil, Ranjit

-

Ultimate Bicycle Company

$70,529.81

2004

Varkey Chudukatil, Ranjit

-

Wheels Inc.

$440.17

2004

Varkey Chudukatil, Ranjit

-

-

$1,658,518.07

2004

-

Australia

Bike Part Wholesalers

$62,881.71

2004

-

Australia

Budget Toy Store

$50,869.88

2004

-

Australia

Cycle Parts and Accessories

$70,380.14

2004

-

Australia

Eastside Cycle Shop

$613.30

 

As you can see, this section of results shows summary combinations for year, sales rep, and customer followed by year, territory and customer.

Scanning further down the result set's summary rows, here is another sample:


Year

Sales Person

Territory

Customer

Order Value

2004

-

Southwest

Westside Plaza

$253,958.70

2004

-

Southwest

World Bike Discount Store

$3,227.01

2004

-

Southwest

 

$5,855,307.48

2004

-

United Kingdom

Individual

$2,750,729.27

2004

-

United Kingdom

 

$2,750,729.27

2004

-

-

Accessories Network

$1,722.52

2004

-

-

Acclaimed Bicycle Company

$2,152.08

2004

-

-

Ace Bicycle Supply

$2,778.46

2004

-

-

Activity Center

$17,728.63

2004

-

-

Worthwhile Activity Store

$62,851.44

2004

-

-

 

$29,137,477.01

-

Ansman-Wolfe, Pamela

Northwest

A Bike Store

$102,351.80

-

Ansman-Wolfe, Pamela

Northwest

All Cycle Shop

$1,425.87

-

Ansman-Wolfe, Pamela

Northwest

Alternative Vehicles

$10,945.45

-

Ansman-Wolfe, Pamela

Northwest

Bike Experts

$58,305.07

-

Ansman-Wolfe, Pamela

Northwest

Capable Sales and Service

$178,854.52

 

Now we're getting summary combinations for year, territory, and customer, trailed by rows that summarize by sales rep, territory, and customer. If you were to comb through all the rows, you'd see rows showing totals by year alone, rows by customer alone, and all variations in between!

If you're familiar with pivot tables in Excel or Access, then you'll see a familiar connection. Pivot tables, which are often associated with BI functionality, are powerful because they allow the user to summarize a base set of data by any combination of supplied summary values. CUBE does something similar for a DB2 query in that it summarizes for various combinations of data within the data set.

When I look at the base sample query I wrote to demonstrate the WITH ROLLUP option, I'm now questioning the decision to make YEAR the highest order column in the GROUP BY. Perhaps it would be more useful to see the sales person as the highest level summarization and then have sales year as the next summary level within sales person. Should I rework the query? With CUBE, it doesn't really matter because CUBE will return all of these summarizations. In fact, CUBE quickly allows a user to answer many of the questions asked at the beginning of this tip because CUBE gives the answer to all combinations of summarizations that are possible within the query.

Be careful though as the number of summary rows returned by CUBE can be very large. In my test query shown above, there are 1,125 "normal" rows returned by the query. The CUBE function that returns a summary row for all variations of distinct values in the GROUP BY columns ended up adding 5,435 rows to the result set! So CUBE has given me all variations of possible summary rows; all that is left is a matter of locating which summary row(s) to review.

Grouping Sets

Often in BI applications, the big picture is more important than the details. In these cases, it's more useful to study the forest instead of the individual trees. CUBE and ROLLUP give us detail information (trees) along with some summary information (helping us see the forest), but sometimes this is too much information. That's where GROUPING SET comes in.

When GROUPING SET is specified on the GROUP BY clause, the query will only return "aggregates" (i.e., the big picture). Each "set" to be aggregated is specified by enclosing a column list by parenthesis. Take a look at the following query:

Select Territory,Sales_Person,
       Sum(SubTotal) As OrderValue,
       Avg(SubTotal) As AvgOrder
  From vwSalesOrderInfo
  Where Sales_Person<>'* House Account *'
    And Territory Not In ('Australia',
	'France','Germany','United Kingdom')
Group By Grouping Sets ((Territory,Sales_Person))
Order By Territory,Sales_Person

This query returns this aggregated result set for combinations of territory and sales_person:


Territory

Sales Person

Order Value

Avg Value

Canada

Jiang, Stephen

$ 264,867.01

$26,486.70

Canada

Pak, Jae

$10,302,726.69

$29,605.54

Canada

Saraiva, José

$ 2,532,500.91

$25,325.01

Canada

Vargas, Garrett

$ 4,380,714.26

$18,721.00

Central

Blythe, Michael

$ 3,127,053.03

$18,724.87

Central

Carson, Jillian

$ 3,543,660.98

$24,439.04

Central

Ito, Shu

$ 621,258.94

$32,697.84

Central

Jiang, Stephen

$ 43,824.02

$43,824.02

Central

Mitchell, Linda

$ 2,225,871.15

$50,587.98

Northeast

Blythe, Michael

$ 3,547,034.40

$26,081.14

Northeast

Carson, Jillian

$ 4,735,174.26

$23,441.46

Northeast

Jiang, Stephen

$ 100,165.04

$25,041.26

Northwest

Ansman-Wolfe, Pamela

$ 4,029,938.36

$42,420.40

Northwest

Campbell, David

$ 4,551,897.66

$24,084.11

Northwest

Ito, Shu

$ 936,689.47

$31,222.98

Northwest

Jiang, Stephen

$ 279,997.59

$27,999.76

Northwest

Mensa-Annan, Tete

$ 2,814,958.89

$20,106.85

Northwest

Mitchell, Linda

$ 2,562,534.43

$35,590.76

Southeast

Blythe, Michael

$ 347,730.29

$28,977.52

Southeast

Carson, Jillian

$ 309,496.80

$16,289.31

Southeast

Jiang, Stephen

$ 181,804.21

$20,200.47

Southeast

Reiter, Tsvi

$ 8,714,865.97

$20,314.37

Southwest

Blythe, Michael

$ 4,230,221.05

$31,334.97

Southwest

Carson, Jillian

$ 3,569,595.14

$33,360.70

Southwest

Ito, Shu

$ 6,371,216.56

$33,011.48

Southwest

Jiang, Stephen

$ 498,966.78

$35,640.48

Southwest

Mitchell, Linda

$ 7,859,324.25

$26,024.25

 

A similar query with a slightly different GROUPING SET, looks like this:

Select Territory, Sales_Person,
       Sum(SubTotal) As OrderValue,
       Avg(SubTotal) As AvgOrder
  From vwSalesOrderInfo
  Where Sales_Person<>'* House Account *'
    And Territory Not In ('Australia',
	'France','Germany','United Kingdom')
Group By Grouping Sets ((Territory),(Sales_Person))
Order By Territory,Sales_Person

This query actually has two distinct GROUPING SETS, one for territory and one for sales_person. The query returns this result set:


Territory

Sales Person

Order Value

Avg Value

Canada

-

$17,480,808.86

$25,261.28

Central

-

$ 9,561,668.12

$25,429.97

Northeast

-

$ 8,382,373.69

$24,509.86

Northwest

-

$15,176,016.40

$28,313.46

Southeast

-

$ 9,553,897.28

$20,370.78

Southwest

-

$22,529,323.78

$29,999.10

-

Ansman-Wolfe, Pamela

$ 4,029,938.36

$42,420.40

-

Blythe, Michael

$11,252,038.77

$25,004.53

-

Campbell, David

$ 4,551,897.66

$24,084.11

-

Carson, Jillian

$12,157,927.19

$25,703.86

-

Ito, Shu

$ 7,929,164.97

$32,765.14

-

Jiang, Stephen

$ 1,369,624.65

$28,533.85

-

Mensa-Annan, Tete

$ 2,814,958.89

$20,106.85

-

Mitchell, Linda

$12,647,729.83

$30,257.73

-

Pak, Jae

$10,302,726.69

$29,605.54

-

Reiter, Tsvi

$ 8,714,865.97

$20,314.37

-

Saraiva, José

$ 2,532,500.91

$25,325.01

-

Vargas, Garrett

$ 4,380,714.26

$18,721.00

 

Whereas in the prior example, we had a single GROUPING SET consisting of two columns giving a summary for each combination, by separating each column into its own "set," each column now gets its own unique group total.

Additionally, we actually have the option of applying a CUBE or ROLLUP operation to any or all of our GROUPING SETS:

Select Territory,Sales_Person,
       Sum(SubTotal) As OrderValue,
       Avg(SubTotal) As AvgOrder
  From vwSalesOrderInfo
 Where Sales_Person<>'* House Account *'
   And Territory Not In ('Australia',
   'France','Germany','United Kingdom')
Group By Grouping Sets (
Rollup(Territory,Sales_Person))
Order By Territory,Sales_Person

As we've already seen, ROLLUP will add subtotals and a grand total to the result set:


Territory

Sales Person

Order Value

Avg Value

Canada

Jiang, Stephen

$ 264,867.01

$26,486.70

Canada

Pak, Jae

$10,302,726.69

$29,605.54

Canada

Saraiva, José

$ 2,532,500.91

$25,325.01

Canada

Vargas, Garrett

$ 4,380,714.26

$18,721.00

Canada

-

$17,480,808.86

$25,261.28

Central

Blythe, Michael

$ 3,127,053.03

$18,724.87

Central

Carson, Jillian

$ 3,543,660.98

$24,439.04

Central

Ito, Shu

$ 621,258.94

$32,697.84

Central

Jiang, Stephen

$ 43,824.02

$43,824.02

Central

Mitchell, Linda

$ 2,225,871.15

$50,587.98

Central

-

$ 9,561,668.12

$25,429.97

Northeast

Blythe, Michael

$ 3,547,034.40

$26,081.14

Northeast

Carson, Jillian

$ 4,735,174.26

$23,441.46

Northeast

Jiang, Stephen

$ 100,165.04

$25,041.26

Northeast

-

$ 8,382,373.69

$24,509.86

Northwest

Ansman-Wolfe, Pamela

$ 4,029,938.36

$42,420.40

Northwest

Campbell, David

$ 4,551,897.66

$24,084.11

Northwest

Ito, Shu

$ 936,689.47

$31,222.98

Northwest

Jiang, Stephen

$ 279,997.59

$27,999.76

Northwest

Mensa-Annan, Tete

$ 2,814,958.89

$20,106.85

Northwest

Mitchell, Linda

$ 2,562,534.43

$35,590.76

Northwest

-

$15,176,016.40

$28,313.46

Southeast

Blythe, Michael

$ 347,730.29

$28,977.52

Southeast

Carson, Jillian

$ 309,496.80

$16,289.31

Southeast

Jiang, Stephen

$ 181,804.21

$20,200.47

Southeast

Reiter, Tsvi

$ 8,714,865.97

$20,314.37

Southeast

-

$ 9,553,897.28

$20,370.78

Southwest

Blythe, Michael

$ 4,230,221.05

$31,334.97

Southwest

Carson, Jillian

$ 3,569,595.14

$33,360.70

Southwest

Ito, Shu

$ 6,371,216.56

$33,011.48

Southwest

Jiang, Stephen

$ 498,966.78

$35,640.48

Southwest

Mitchell, Linda

$ 7,859,324.25

$26,024.25

Southwest

-

$22,529,323.78

$29,999.10

-

-

$82,684,088.14

$26,116.26

 

Summary (Or Should I Say Aggregate?)

These super group and grouping set functions are aimed at BI applications. They allow a developer to provide many answers from a data set all within the confines of a single, simple query. As always, remember to review your indexes and optimizer messages to make sure heavy duty queries will be acceptable before moving them into production. Once your user community realizes the power to easily analyze their data has been unleashed, writing these BI queries will be all the rage within your company.


Michael Sansoterra is a programmer/analyst for i3 Business Solutions, an IT services firm based in Grand Rapids, Michigan. Send your questions or comments for Mike to Ted Holt via the IT Jungle Contact page.


RELATED STORY

Treasury Of New DB2 6.1 Features, Part 1: Query Enhancements



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


Sponsored By
PROFOUND LOGIC SOFTWARE

When modernizing green-screens, there
are many technologies to choose from. How do
you know which one is right for you?

Is it Java? CGI? PHP? .NET?

How do you know which one will prevail?

Download our free on-demand webinar today
and find out how to pick the right modernization approach.

Register for the FREE webinar today


Senior Technical Editor: Ted Holt
Technical Editor: Joe Hertvik
Contributing Technical Editors: Edwin Earley, Brian Kelly, Michael Sansoterra
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

BCD:  Reaching your IBM i Web modernization goals is a lot closer with BCD
WMCPA:  24rd Annual Spring Technical Conference, April 1 & 2, 2009, Delavan, WI
COMMON:  Join us at the 2009 annual meeting and expo, April 26-30, Reno, Nevada


 

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
Getting Dizzy from Dynamic Infrastructure

The Economy Gives the Server Biz a Flat Tire in Q4

Infor Battles Customers in Court Over License Fees

As I See It: Isolation

Global IT Spending Barely Ahead of 2008; Some Regions Showing Strength

Four Hundred Stuff
DB2/400 Storage Engine for MySQL Now Available as Public Beta

PHP Saves Company Millions by Refurbishing Old ERP System

ManageEngine Goes On Demand with Data Center Tools

RSA Cracks Down on Security Threats with enVision 4.0

Kisco Adds Fax Support to WebReport/400

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

System i PTF Guide
March 7, 2009: Volume 11, Number 10

February 28, 2009: Volume 11, Number 9

February 21, 2009: Volume 11, Number 8

February 14, 2009: Volume 11, Number 7

February 7, 2009: Volume 11, Number 6

January 31, 2009: Volume 11, Number 5

TPM at The Register
IBM not worried about Cisco blades

IBM boasts of full 8Gb Fibre Channel for blades

EuroMidEastAfrica server biz tumbles

Intel 'Nehalem' Xeons poised for March 31 launch

AT&T wants to run your data center

Gartner: PC sales, except netbooks, to slump in 2009

Citrix taps VMLogix for fake server jukeboxing

Taiwan bails out memory makers

Lenovo erects Atom tower

Forrester: Fake servers like recessions

HP babysits small biz servers

Dell plays with virtual data centers

Server market gets second opinion on Q4

SGI lays off another 9 per cent

THIS ISSUE SPONSORED BY:

WorksRight Software
Profound Logic Software
Northeast User Groups Conference


Printer Friendly Version


TABLE OF CONTENTS
Looking for Commitment, Part 1

Treasury of new DB2 6.1 Features, Part 2: Grouping Sets and Super Groups

Admin Alert: Six Ways to Mess Up i5/OS User Profiles Security (And What To Do About It)

Four Hundred Guru

BACK ISSUES

From the IT Jungle Forums
ADO.NET/IBM.Data.DB2.iSeries/ iDB2Connection

Order by alias names

SQL procedure

Insert via Java

iSeries Access for Web

Mimix installation and configuration docs

EDI Inovis Programmer - Heavy Duty Problem Solver - Anytime




 
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-2009 Guild Companies, Inc. All Rights Reserved.
Guild Companies, Inc., 50 Park Terrace East, Suite 8F, New York, NY 10034

Privacy Statement