• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Guru: Conditional SQL Unions

    July 17, 2017 Ted Holt

    SQL unions combine two or more result sets into one. That’s what they were designed to do. But unions also provide a way to choose between alternate result sets, i.e. to enable or disable SELECT statements at run time. I have used this feature to advantage on numerous occasions. Here’s how it’s done.

    First consider the nature of unions. Each result set of a union can return data or no data, depending on the criteria in the WHERE and HAVING clauses. If a SELECT retrieves no data, the system appends an empty set to the union result. The way to turn a SELECT on or off, then, is to control the selection criteria in the WHERE and HAVING clauses.

    As always, we need an example. Let’s start with a simple query. Let’s make a list of customers in Minnesota and New York. This would be a very easy query.

    select State, City, CusNum, LstNam
      from qiws.qcustcdt
     where State in ('MN', 'NY')
    

    If we have customers in either or both of those states, we get a result set.

    State City CusNum LstNam
    MN Isle 846283 Alison
    MN Isle 583990 Abraham
    NY Clay 839283 Jones
    NY Hector 397267 Tyron
    NY Hector 192837 Lee

    If we have no customers in those states, then no rows (records) match the WHERE clause and we get an empty set.

    Suppose that the result set, whether empty or populated, loads a grid in a GUI form. If the result set contains data, the user gets a list of customers. If the result set is empty, let’s be considerate and give the user a message. We don’t want people to sit around wondering if the computer is ever going to process their request or not.

    with Selected as
       (select State, City, char(cusnum) as CusNum, LstNam
          from qiws.qcustcdt
         where State in ('MN', 'NY'))
    select State, City, CusNum, LstNam
      from (select State, City, CusNum, LstNam
              from Selected     
             union all
            select 'No data', ' ', ' ', ' '
              from Selected
            having count(*) = 0 ) as x (State, City, CusNum, LstNam)
    order by State
    

    Look at the difference. I moved the SELECT into a common table expression called Selected.

    with Selected as
       (select State, City, char(cusnum) as CusNum, LstNam
          from qiws.qcustcdt
         where State in ('MN', 'NY'))
    

    I chose to convert the number account number to character. That’s not necessary, but it will make the union a little smoother.

    Now query the common table expression:

    select State, City, CusNum, LstNam
      from (select State, City, CusNum, LstNam
              from Selected     
             union all
            select 'No data', ' ', ' ', ' '
              from Selected
            having count(*) = 0 ) as x (State, City, CusNum, LstNam)
    order by State
    

    The FROM clause unions two SELECT statements. The first reads the data in Selected, and so may or may not return a result set. The second one returns a result set of one row if the common table expression is empty.

    select 'No data', ' ', ' ', ' '
      from Selected
    having count(*) = 0
    

    This statement may look a little funny to you. It has a HAVING clause without a GROUP BY. In such a case, the entire input set (here, common table expression Selected) is treated as one group, and the SELECT clause can only have literals and aggregate functions. If it bothers you that GROUP BY is missing, you can add this one:

    group by ()
    

    If the result set comes up empty, the grid shows this:

    State City CusNum LstNam
    No data

    The effect is that one, and only one, of the two SELECT statements returns data.

    Works for me.

    RELATED STORIES

    The State of the UNION

    Grouping a Union

    Using UNION for Data Analysis

    SQL Facts Of UNION And ORDER BY

    Share this:

    • Share on Reddit (Opens in new window) Reddit
    • Share on Facebook (Opens in new window) Facebook
    • Share on LinkedIn (Opens in new window) LinkedIn
    • Share on X (Opens in new window) X
    • Email a link to a friend (Opens in new window) Email

    Tags: Tags: 400guru, IBM i, SQL

    Sponsored by
    FalconStor

    Simplify Secure Offsite Data Protection for IBM Power with FalconStor Habanero™

    IBM i teams are under growing pressure to ensure data is protected, recoverable, and compliant—without adding complexity or disrupting stable environments.

    FalconStor Habanero™ provides secure, fully managed offsite data protection purpose-built for IBM Power. It integrates directly with existing IBM i backup tools and processes, enabling reliable offsite copies without new infrastructure, workflow changes, or added operational overhead.

    By delivering and managing the service end-to-end, FalconStor helps organizations strengthen cyber resilience, improve disaster recovery readiness, and meet compliance requirements with confidence. Offsite copies are securely maintained and available when needed, supporting recovery, audits, and business continuity.

    FalconStor Habanero offers a straightforward way to modernize offsite data protection for IBM i: focused on simplicity, reliability, and resilience.

    Learn More

    Share this:

    • Share on Reddit (Opens in new window) Reddit
    • Share on Facebook (Opens in new window) Facebook
    • Share on LinkedIn (Opens in new window) LinkedIn
    • Share on X (Opens in new window) X
    • Email a link to a friend (Opens in new window) Email

    IBM i Security Expert Interprets PCI and Multi-Factor Authentication Of Course i’s Not The AS/400

    Leave a ReplyCancel reply

TFH Volume: 27 Issue: 47

This Issue Sponsored By

  • BCD
  • Profound Logic Software
  • OCEAN Tech Con 2017
  • Maxava
  • Manta Technologies

Table of Contents

  • Getting Hyperconverged On Power Systems
  • Of Course i’s Not The AS/400
  • Guru: Conditional SQL Unions
  • IBM i Security Expert Interprets PCI and Multi-Factor Authentication
  • Mixed Results For IT Spending Forecasts

Content archive

  • The Four Hundred
  • Four Hundred Stuff
  • Four Hundred Guru

Recent Posts

  • Bob Code Assistant Gets Better Understanding Of IBM i Applications
  • IBM i In The Cloud And The Case For Reversing Replication
  • Guru: From Hiking Boots To Long-Term Memory
  • Inside IBM’s New PowerHA Cloud Offering, Full System Manager
  • IBM i PTF Guide, Volume 28, Number 39
  • Power Systems Turns In Another Great Quarter
  • Big Blue Is Right On Schedule With Fall 2026 IBM i Tech Refreshes
  • Guru: Environment Variables – Global Variables Wearing Hiking Boots
  • A New IBM i Entity Takes Shape: Power By Fortra
  • IBM i PTF Guide, Volume 28, Number 38

Subscribe

To get news from IT Jungle sent to your inbox every week, subscribe to our newsletter.

Pages

  • About Us
  • Contact
  • Contributors
  • Four Hundred Monitor
  • IBM i PTF Guide
  • Media Kit
  • Subscribe

Search

Copyright © 2025 IT Jungle