TSQL Help Counting from 2 different tables.

I am trying to Count the number of items from 2 different Tables (A & B)
But if I have a count in A and B I get 2 separate records. Id like them to be on the same record.
Below is what I currently have.
SELECT
CUST.ID,
CUST.ID_Name,
COUNT(TABLEA.Item_ID) AS itemCount,
0 AS itemCountShipped,
0 AS itemCountTotal
FROM TABLEA LEFT OUTER JOIN CUST ON TABLEA.ID = CUST.ID
WHERE CUST.Customer_Type = 'I' OR CUST.Customer_Type = 'C'
GROUP by CUST.ID,CUST.ID_Name
UNION ALL
SELECT
CUST.ID,
CUST.ID_Name,
0 AS itemCount,
COUNT(TABLEB.Item_ID) AS itemCountShipped,
0 AS itemCountTotal
FROM  TABLEB LEFT OUTER JOIN CUST ON TABLEB.ID = CUST.ID
WHERE CUST.Customer_Type = 'I' OR CUST.Customer_Type = 'C'
GROUP by CUST.ID,CUST.ID_Name
ORDER BY CUST.ID_Name
Ideally, I would like to have the all Counts to be calculated in the TSQL and have 1 record per ID.....and if there was a way to add those 2 up in the SQL that would be good too.  I currently process my data to give me the itemCountTotal.
Any help would be greatly appreciated.

On this portion "a.ItemCount, b.ItemCountShipped,"
These fields are not on TABLEA or TABLEB, but if I remove the TABLE name from the front then TSQL says it cant find those fields.
SELECT COALESCE(a.ID, B.ID) as ID, COALESCE(a.Name, b.Name) as Name,
a.ItemCount, b.ItemCountShipped,
COALESCE(a.ItemCount,0) + coalesce(b.ItemCountShipped,0) as itemCountTotal -- shipped + original count?

Similar Messages

  • Union dates and count(*) from different tables

    Hope you can help. Using Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    I have tables called apples, oranges, and pears. I want to get a count of all apples, oranges, pears and a total for a date range in one query statement. Any ideas?
    for apples the sql is select count(apple_types) from apples where apple_date > TO_DATE('2012-01-01')
    for oranges the sql is select count(orange_types) from orange where orange_date > TO_DATE('2012-01-01')
    for pears the sql is s elect count(pear_types) from pears where pears_date > TO_DATE('2012-01-01')
    EXAMPLE DATA
    Data for apples
    2012-01-01 4
    2012-04-23 1
    Data for oranges
    2012-02-13 5
    2012-03-11 2
    Data for pears
    2012-01-01 11
    I would like the output to be
    date count(apple_types) count(orange_types) count(pear_types) total
    2012-01-01 4 0 11 15
    2012-02-13 0 5 0 5
    2012-03-11 0 2 0 2
    2012-04-23 1 0 0 1

    here is one with pivot
    WITH apples
         AS (SELECT TO_DATE ('2012-01-01', 'yyyy-mm-dd') dt, 4 cnt FROM DUAL
             UNION ALL
             SELECT TO_DATE ('2012-04-23', 'yyyy-mm-dd') dt, 1 cnt FROM DUAL),
         oranges
         AS (SELECT TO_DATE ('2012-01-13', 'yyyy-mm-dd') dt, 5 cnt FROM DUAL
             UNION ALL
             SELECT TO_DATE ('2012-03-11', 'yyyy-mm-dd') dt, 2 cnt FROM DUAL),
         pears
         AS (SELECT TO_DATE ('2012-01-01', 'yyyy-mm-dd') dt, 11 cnt FROM DUAL),
         t
         AS (  SELECT dt, SUM (cnt) cnt, 'apples' fruit
                 FROM apples
             GROUP BY dt
             UNION ALL
               SELECT dt, SUM (cnt), 'oranges'
                 FROM oranges
             GROUP BY dt
             UNION ALL
               SELECT dt, SUM (cnt), 'pears'
                 FROM pears
             GROUP BY dt)
      SELECT dt,
             NVL (apples, 0),
             NVL (oranges, 0),
             NVL (pears, 0),
             NVL (apples, 0) + NVL (oranges, 0) + NVL (pears, 0) total
        FROM t PIVOT (MAX (cnt)
               FOR fruit
               IN ('apples' AS apples, 'oranges' AS oranges, 'pears' AS pears))
    ORDER BY 1
    DT     NVL(APPLES,0)     NVL(ORANGES,0)     NVL(PEARS,0)     TOTAL
    1/1/2012     4     0     11     15
    1/13/2012     0     5     0     5
    3/11/2012     0     2     0     2
    4/23/2012     1     0     0     1

  • How to display multiple data from different table in one table? please help

    Hi
    I got sun java studio creator 2(the separate installation not the one in the net beans)....
    My question is about displaying data that have been taken from the database.... I know how to display data in a table(just click on the table "bind data" )... but my question is that:
    when i want to use a sql statement that taken the data from different table...
    how can i display that data in the table(that will be shown in the web) ??? when i click bind data on the table i can only select one table i can't select more than one....
    Note:
    1) i'm using the rowset for displaying the data in the table, since the sql statement is depending on a condition(i.e. select a from b where c= ? )...
    2) i mean by different table is that( i.e. select a from table1,table2 )..
    thanks in advance...

    Hi,
    937440 wrote:
    Hi every one, this is my first post in this portal. Welcome to the forum!
    Be sure to read the forum FAQ {message:id=9360002}
    I want display the details of emp table.. for that I am using this SQL statement.
    select * from emp where mgr=nvl(:mgr,mgr);
    when I give the input as 7698 it is displaying the corresponding records... and also when I won't give any input then it is displaying all the records except the mgr with null values.
    1)I want to display all the records when I won't give any input including nulls
    2)I want to display all the records who's mgr is null
    Is there any way to incorporate to include all these in a single query..It's a little unclear what you're asking.
    The following query always includes rows where mgr is NULL, and when the bind variable :mgr is NULL, it displays all rows:
    SELECT  *
    FROM     emp
    WHERE     LNNVL (mgr != :mgr)
    ;That is, when :mgr = 7698, it displays 6 rows, and when :mgr is NULL it displays 14 rows (assuming you're using the Oracle-supplied scott.emp table).
    The following query includes rows where mgr is NULL only when the bind variable :mgr is NULL, in which case it displays all rows:
    SELECT     *
    FROM     emp
    WHERE     :mgr     = mgr
    OR       :mgr       IS NULL
    ;When :mgr = 7698, this displays 5 rows, and when :mgr is NULL it displays 14 rows.
    The following query includes rows where mgr is NULL only when the bind variab;e :mgr is NULL, in which case it displays only the rows where mgr is NULL. That is, it treats NULL as a value:
    SELECT     *
    FROM     emp
    WHERE     DECODE ( mgr
                , :mgr, 'OK'
                )     = 'OK'
    ;When :mgr = 7698, this displays 5 rows, and when :mgr is NULL, it displays 1 row.

  • Report using Data from different tables

    Hello,
    I am trying to convert a Cobol batch program to Oracle 6i tabular report.
    The data is fetched from many different tables and there are lots of processing(i.e, based on the value of a column from one table need additional processing from different tables) required to generate the desired columns in the final report.
    I would like to know what is the best strategy to follow in Oracle Reports 6i. I heard that CREATE GLOBAL TEMPORARY TABLE is an option. ( or REF CURSOR ?) I do not know much about its usage. Can somebody guide me about this or any other better way to achieve the result.
    Thank you in advance
    Priya

    Hello,
    There are many, many options available to you, each of which has advantages and disadvantages. This is why it is difficult to answer "what is best?" without alot more details about your specific circumstances.
    In general, you're going to be writing PL/SQL to do any conditional logic that cannot be expressed as pure SQL. It can executed in the database, or it can executed within Reports itself. And most reports developers do some of both.
    As a general rule, you want to send only the data you need from the database to the report. This means you want to do as much filtering and aggregating of the data as is readily possible within the database. If this cannot be expressed as plain SQL queries, then you'll want to create a stored procedures to help do this work.
    Generally, the PL/SQL you create for executing within the report should be focused on control of the formatting, such as controlling whether a field is visible, or controlling display attributes for conditional formatting.
    But these are not hard and fast rules. In some cases, it is difficult to get all the stored procedures you might like installed into the database. Perhaps the dba is reluctant to let you install that many stored procedures. Perhaps there are restrictions when and how often updates can be made to stored procedures in a production database, which makes it difficult to incrementally adjust your reports based on user feedback. Or perhaps there are restrictions for how long queries are allowed to run.
    So, Reports offers lots of options and features to let you do data manipulation operations from within the report data model.
    In any case, Oracle does offer temporary table capabilities. You can populate a temp table by running stored procedures that do queries, calculations and aggregations. And you can define and initiate a dynamic query statement within the database and pass a handle to this query off to the report to execute (ref cursor).
    From the reports side, you can have as many queries as you want in the data model, arranged in any hierarchy via links. You can parameterize and change the queries dynamically using bind variables and lexicals. And you can add calculations, aggregations, and filters.
    Again, most people do data manipulation both in the database and in Reports, using the database for what it excels at, and Reports for what it excels at.
    Hope this helps.
    Regards,
    The Oracle Reports Team --skw                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • Get row count for different tables to the same line

    How can I get the row count for different tables in one line:
    SELECT count(A), count(B), count(C) from table tb_a A , tb_b B, tb_c C;
    Thanks!

    >
    Hi,
    How can I get the row count for different tables in one line:
    SELECT count(A), count(B), count(C) from table tb_a A , tb_b B, tb_c C;Something like this? One of the many uses for CTE's - Common Table Expressions - AKA
    subquery refactoring. Worth getting to know - very handy!
    with acount as
      select count(*) as counta from dual  -- put your table name here
    bcount as
      select count(*) as countb from dual  -- put your table name here
    ccount as
      select count(*) as countc from dual  -- put your table name here
    select a.counta, b.countb, c.countc from acount a, bcount b, ccount c;HTH,
    Paul...
    Edited by: Paulie on 25-Jul-2012 17:44

  • Fetch data from different tables print them is assigned places

    Hi Friends,
    I have designed one SMART-Form (Receipt).
    I need to fetch data from different tables and the data must be print in assigned places. Please help me how to achieve this requirement. Thanks for your help.
    Best regards,
    Manju.
    Edited by: Alvaro Tejada Galindo on Feb 12, 2008 10:20 AM

    U're right.
    When it creates a smartform it needs to decide when the main data have to be extracted:
    - or in driver program
    - or in smartforms
    The difference can be in the performance, because the program can select the data only once, the smartforms needs to extract them everytime it's called.
    I prefer to use a complex structure for the smartform interface as so all data I need are in only one structure, the problem is the complex structure is harder to be managed.
    Max

  • Procedure to check data from different tables

    Hi
    I am trying to write a procedure to compare data from a table with another.
    Table 1
    ID Name Dept
    1 ABC Y
    2 DEF Z
    Table 2
    ID Dept
    1 Y
    2 Z
    Table 3
    Name ID
    1 ABC
    2 DEF
    I would like to compare each record data in Table 1 with data from different tables table2,table3 by matching ID,name.... Please help me with how I could start writing a procedure and also spool data that does not match from the table1 with other tables
    thanks
    Edited by: 890563 on Apr 30, 2012 10:34 AM

    Hope below helps you.
    CREATE TABLE TABLE1
    (    ID          VARCHAR2(10),
         FIRST_NAME  VARCHAR2(30),
         LAST_NAME   VARCHAR2(30),
         MIDDLE_NAME VARCHAR2(30)
    INSERT INTO TABLE1 VALUES('123456','testfirst','testlast','testmiddle');
    INSERT INTO TABLE1 VALUES('123457','testfirst1','testlast1','testmiddle1');
    CREATE TABLE TABLE1
    (    ID          VARCHAR2(10),
         FIRST_NAME  VARCHAR2(30),
         LAST_NAME   VARCHAR2(30),
         MIDDLE_NAME VARCHAR2(30)
    INSERT INTO TABLE2 VALUES('123456','testfirst','testlas','testmidd');
    INSERT INTO TABLE2 VALUES('123457','testfirst2','testlast1','testmiddle1');
    SELECT TABLE1.ID,
            -- Match First Name
         CASE WHEN TABLE1.FIRST_NAME != TABLE2.FIRST_NAME THEN TABLE1.FIRST_NAME ELSE NULL END TABLE1_FIRST_NAME,
         CASE WHEN TABLE1.FIRST_NAME != TABLE2.FIRST_NAME THEN TABLE2.FIRST_NAME ELSE NULL END TABLE2_FIRST_NAME,
            -- Match Middle Name
         CASE WHEN TABLE1.MIDDLE_NAME != TABLE2.MIDDLE_NAME THEN TABLE1.MIDDLE_NAME ELSE NULL END TABLE1_MIDDLE_NAME,
            CASE WHEN TABLE1.MIDDLE_NAME != TABLE2.MIDDLE_NAME THEN TABLE2.MIDDLE_NAME ELSE NULL END TABLE2_MIDDLE_NAME,
            -- Match Last Name
         CASE WHEN TABLE1.LAST_NAME != TABLE2.LAST_NAME THEN TABLE1.LAST_NAME ELSE NULL END TABLE1_LAST_NAME,
            CASE WHEN TABLE1.LAST_NAME != TABLE2.LAST_NAME THEN TABLE2.LAST_NAME ELSE NULL END TABLE2_LAST_NAME
    FROM  TABLE1, TABLE2
    WHERE TABLE1.ID = TABLE2.ID
    ID         TABLE1_FIRST_NAME  TABLE2_FIRST_NAME  TABLE1_MIDDLE_NAME TABLE2_MIDDLE_NAME TABLE1_LAST_NAME   TABLE2_LAST_NAME
    123456     NULL               NULL               testmiddle         testmidd           testlast        testlas
    123457     testfirst1         testfirst2         NULL               NULL               NULL            NULL
    {code}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • How to get only column names from different tables as single table columns

    Hi All,
       I have one requirement in which we want only column names from different tables.
    for example :
     I have three tables T1 ,T2, T3 having
      col1 clo2 clo3 -->  T1 , 
      col3 col5 ,clo6 --> T2 ,
      Clo6 col8 col9 --> T3
    columns i want to get only all  Column names from all table as single Resultset not any data from that how can i get that empty resultset 
    because this empty result i want to bind in datagridview(front end) as Empty resultset 
    Please tell me anyways to do this
    Niraj Sevalkar

    If I understand you want an empty result set, just with metadata. SET FMTONLY do the trick:
    SET FMTONLY ON
    SELECT Col1, Col2, Col3, ....., Coln
    FROM
    T1 CROSS JOIN T2 CROSS JOIN T3
    SET FMTONLY OFF
    Another alternative is to include an imposible contition
    SELECT Col1, Col2, Col3, ....., Coln
    FROM
    T1 CROSS JOIN T2 CROSS JOIN T3
    WHERE 1 = 0
    If you are using a SqlDataAdapter in your client application. You can use the FillSchema method. the select command may be any select statement that returns the columns you want. Under the covers FillSchema will call SET FMTONLY ON.
    If you are using SqlCommand.ExecuteReader you can pass SchemaOnly to CommandBehavior argument. SET FMTONLY ON is called under the covers. Again the select command may be any select statement that returns the columns you want.
    "No darás tropezón ni desatino que no te haga adelantar camino" Bernardo Balbuena

  • How to do a SELECT from different tables into an internal table?

    How to do a SELECT from different tables into an internal table?
    I want to select data from MARA, MARC and ZPERSON and populate my ITAB_FINAL
    REPORT  zinternal_table.
    TABLES:
      mara,
      marc,
      zperson.
    TYPES:
    BEGIN OF str_table1,
      v_name LIKE zperson-zname,
      v_matnr LIKE marc-matnr,
      v_emarc LIKE marc-emarc,
      v_werks_d LIKE marc-werks_d,
      v_dstat LIKE marc-dstat,
      END OF str_table,
      i_table1 TYPE STANDARD TABLE OF str_table1.
    DATA:
    BEGIN OF str_table2,
    v_mandt LIKE mara-mandt,
    v_ernam LIKE mara-ernam,
      v_laeda LIKE mara-laeda,
    END OF str_table2,
    itab_final LIKE STANDARD TABLE OF str_table2.

    first find the link between mara , marc and zperson , if u have link to 3 tables then u can jus write a join and populate the table u want ( thats final table with all the fields).
    u defenitely have alink between mara and marc so join them and retrieve all data into one internal table.
    then for all the entries in that internal table retrieve data from zperson into another internal table.
    then loop at one internal table
    read another internal table where key equals in both the tables.
    finally assign fileds if sy-subrc = 0.
    gs_finaltable-matnr = gs_table-matnr
    etc...
    and finally append gs_finaltable to gt_finaltable.
    there u go ur final table has all the data u want.
    regards
    Edited by: BrightSide on Apr 2, 2009 3:49 PM

  • Collumn Count from Database Table

    Hello,
    I wan't to get a Collumn Count from a Table in my Database, but I don't know how to do that.
    I use a ResultSet, and if i press ctrl + spacebar in NetBeans I get a list of all kind of things I can get out of the result set but I can't find CollumnCount anywhere.
    I thought I could use a try catch statement like this:
    try
    for(i=1; i<999; i++)
    myResultSet().getString(i);
    catch( Exception e )
    AantalKolommen = i--;
    But everytime I get an Exception over Invalid Crursor State and "i" keeps standing on 1.
    Does anybody know a way to find out how to get a collumns count????

    To retrieve the columns for a table use
    http://java.sun.com/j2se/1.4.2/docs/api/java/sql/DatabaseMetaData.html#getColumns(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String)
    To get the columns for your result set use
    http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSetMetaData.html#getColumnCount()
    To get the ResultSetMetaData use
    http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html#getMetaData()

  • Retriving of data from different tables

    retriving of data from different tables depening of the primary key  this key field is there in all tables   if it is there in one v table it should continue to other tables otherwise it should get exit from that it should display information message or otherwise success  message if it is there in all tables .

    Im writing the concept, just check it.
    SELECT * from kna1 into lt_kna1.
    if sy-subrc eq 0.
       selest * from lfa1 into lt_lfa1
    for all entries in lt_kna1.
    endif.

  • Retrieving Data from different Tables with same tuple name

    Hi,
    I am made the following query from different tables. A tuple "name" is appearing in some tables. So when I run the qiery in a Java class, it delivers the same result of c.name, bpl.name and p.name. The result of c.name is correct, but the other 2 names are overwritten. It works perfect in a postgreSql query tool. How can I correct it, plz?
    SELECT c.ad_client_id, c.name, o.c_order_id, o.ref_order_id, bp.name, bpl.name, o.dateordered, o.datepromised, od.c_orderline_id,p.m_product_id,p.name, cur.iso_code, od.qtyordered
    FROM adempiere.ad_client c, adempiere.c_order o, adempiere.c_orderline od, adempiere.c_bpartner bp, adempiere.m_product p, adempiere.c_bpartner_location bpl, adempiere.c_currency cur
    WHERE c.ad_client_id =11 and c.ad_client_id = o.ad_client_id and bp.c_bpartner_id=o.c_bpartner_id and o.c_order_id = od.c_order_id and od.m_product_id = p.m_product_id and o.c_bpartner_location_id =bpl.c_bpartner_location_id and o.c_currency_id=cur.c_currency_id;
    Cheers

    Hi,
    create alias, if u have similar field names as below. Use the alias name (rs.getString("cname") and rs.getString("bpname") and so on ) to retrive data.
    SELECT c.ad_client_id, c.name as cname, o.c_order_id, o.ref_order_id, bp.name as bpname, bpl.name as bplname, o.dateordered, o.datepromised, od.c_orderline_id,p.m_product_id,p.name as pname, cur.iso_code, od.qtyordered
    FROM adempiere.ad_client c, adempiere.c_order o, adempiere.c_orderline od, adempiere.c_bpartner bp, adempiere.m_product p, adempiere.c_bpartner_location bpl, adempiere.c_currency cur
    WHERE c.ad_client_id =11 and c.ad_client_id = o.ad_client_id and bp.c_bpartner_id=o.c_bpartner_id and o.c_order_id = od.c_order_id and od.m_product_id = p.m_product_id and o.c_bpartner_location_id =bpl.c_bpartner_location_id and o.c_currency_id=cur.c_currency_id;Regards,
    Ram

  • TEXT ITEM from different table

    When a TEXT ITEM from different table exists in the DATA BLOCK,
    and when after EXECUTE_QUERY (in trigger POST_QUERY) we issue
    the SELECT for filling the TEXT ITEM from different table, how
    we can prevent FROM_STATUS and RECORD_STATUS to get the
    value "CHANGED" (because othervise COMMIT is updating all the
    records which are the result of EXECUTE_QUERY)?

    Set the record status back to query in Post Query trigger:
    SET_RECORD_PROPERTY(:SYSTEM.TRIGGER_RECORD, 'BLOCK_NAME', STATUS
    , QUERY_STATUS);

  • Field selection from differant tables

    hello all,
             i need to select differant fields from differant tables when i select common fields from both the tables, is it necessary that the common field need to be a primary key in both tables.
    thanks in advance
    seenu

    HI,
        No its not required that the common field be part of the primary key in both tables only thing is you need to prefix the table name if the field names are same. But if you are using a INNER JOIN then there is no need to select both fields since you know the content of both fields will be same if JOIN is ON these fileds as well.
    Regards,
    Sesh
    Message was edited by:
            Seshatalpasai Madala

  • Prioritizing distinct counts from aggregate table

    I am a relatively new developer with limited PL/SQL experience trying to modify an existing query that extracts counts from an aggregate table. What I need to do is set it up so that it only counts the record once based on it's priority. This is currently set up in a DECODE Statement counting only totals (not distinct nor prioritized). What I’m trying to accomplish would be something like this:
    If Service 'A' exists count it and stop. If more than one Service ‘A’ exists count only once.
    If Service 'A' does not exist then check if 'B' exist, if 'B' exists count it and stop. If more than one Service ‘B’ exists count only once.
    If Service 'B' does not exist then check if 'C' exist, if 'C' exists count it and stop. If more than one Service ‘C’ exists count only once. etc.
    It may be possible to have multiple services in a given category and if so should be counted only once.
    Here is a snipit of the existing code....
    COUNT
    (DECODE (service_id,
    1, program_enrollment_id
    ) basic_readjustment,
    COUNT
    (DECODE (service_id,
    2, program_enrollment_id
    ) occupation_skills,
    COUNT (DECODE (service_id,
    3, program_enrollment_id
    ) on_the_job,
    COUNT
    (DECODE (service_id,
    4, program_enrollment_id
    ) placement_assist
    Any help you can give would be appreciated!
    Mark

    Yes, although based on your last post, it is not quite a simple as my example. Your original query as posted will count each occurence of each service_id whether there is one or many for a group. The DISTINCT on the innermost query, against wia_bas_mv, will remove duplicates for a particular service_id, but would leave multiple records it there were different service_ids for the same group.
    The trick is to to get only one record for each group, and make sure that that record is the "highest" priority record. Since your priority order does not match the sort order of the service_ids, you need to add an extra DECODE to get them to "sort" in the right order. Assuming that I have done the service_id mapping correctly, this should be close to what you are looking for:
    SELECT region_id, region_name, officegroupname, officegroupid,
           SUM(basic_readjustment) basic_readjustment,
           SUM(occupation_skills) occupation_skills,
           SUM(on_the_job) on_the_job, SUM(placement_assist) placement_assist,
           SUM(other) other,
           SUM(basic_readjustment + occupation_skills + on_the_job +
               placement_assist + other) total
    FROM (SELECT officegroupname, officegroupid, region_id, region_name,
                 SUM(DECODE(service_id, 'C', 1, 0)) basic_readjustment,
                 SUM(DECODE(service_id, 'A', 1, 0)) occupation_skills,
                 SUM(DECODE(service_id, 'B', 1, 0)) on_the_job,
                 SUM(DECODE(service_id, 'D', 1, 0)) placement_assist,
                 SUM(DECODE(service_id, 'E', 1, 0) other
          FROM (SELECT program_enrollment_id, officegroupname,
                       officegroupid, region_id, region_name,
                       MIN(DECODE(service_id, 368, 'A', 369, 'B', 144, 'C',
                                              114, 'D', 'E')) service_id
                FROM wia_base_mv
                WHERE region_id < 13 AND
                      program_value = 'VAL04_TAA' AND
                      actual_completion_date IS NULL
                GROUP BY program_enrollment_id, officegroupname,
                         officegroupid, region_id, region_name)
          GROUP BY officegroupname, officegroupid, region_id, region_name
          UNION ALL
          SELECT r.region_id, r.region_name, og.officegroupname,
                 og.officegroupid, 0 basic_readjustment, 0 occupation_skills,
                 0 on_the_job, 0 placement_assist, 0 other
          FROM officegroup og, regions r, office_data od
          WHERE r.region_id = od.region_id AND
                og.officeid = od.office_id)
    GROUP BY region_id, region_name, officegroupname, officegroupid
    ORDER BY region_id HTH
    John

Maybe you are looking for