<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: How to collapse all nulls for every table column in a SQL statement</title>
	<atom:link href="http://oraqa.com/2007/02/13/how-to-collapse-all-nulls-for-every-table-column-in-a-sql-statement/feed/" rel="self" type="application/rss+xml" />
	<link>http://oraqa.com/2007/02/13/how-to-collapse-all-nulls-for-every-table-column-in-a-sql-statement/</link>
	<description>Oracle Question and Answer</description>
	<lastBuildDate>Mon, 19 Dec 2011 14:21:07 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: newkid</title>
		<link>http://oraqa.com/2007/02/13/how-to-collapse-all-nulls-for-every-table-column-in-a-sql-statement/comment-page-1/#comment-294</link>
		<dc:creator>newkid</dc:creator>
		<pubDate>Thu, 01 Jul 2010 21:43:46 +0000</pubDate>
		<guid isPermaLink="false">http://oraqa.com/2007/02/13/how-to-collapse-all-nulls-for-every-table-column-in-a-sql-statement/#comment-294</guid>
		<description>&lt;pre&gt;
If I change your data a little bit:
CREATE table t5 as
SELECT  1 as ID, &#039;A&#039; as A, to_char(null) as B, &#039;C&#039; as C , to_char(null) as D
FROM    dual
UNION ALL
SELECT  2, to_char(null), &#039;B&#039;, to_char(null) as C ,&#039;D&#039;
FROM    dual
UNION ALL
SELECT  3, &#039;A1&#039;, &#039;A&#039; as B, to_char(null) as C, &#039;D1&#039;
FROM    dual
UNION ALL
SELECT 4, to_char(null) as A ,&#039;B1&#039;, &#039;C1&#039;, to_char(null) as D
FROM dual;

SELECT * FROM t5;

        ID A  B  C  D
---------- -- -- -- --
         1 A     C
         2    B     D
         3 A1 A     D1  -------- this row is different
         4    B1 C1
         

your result will be:

A  B  C  D
-- -- -- --
A  B  C  D
A1 B1 C1 D1
   B1 C1

Here&#039;s my revised version:
SELECT  MAX(A) AS A,
        MAX(B) AS B,
        MAX(C) AS C,
        MAX(D) AS D
FROM   (SELECT row_number( ) OVER (PARTITION BY LEV ORDER BY ID) AS rn,
                DECODE(lev,1,A) A,
                DECODE(lev,2,B) B,
                DECODE(lev,3,C) C,
                DECODE(lev,4,D) D 
        FROM    t5,(SELECT LEVEL lev FROM dual CONNECT BY LEVEL &lt;=4)
        WHERE
                CASE
                        WHEN    Lev = 1
                        THEN    A
                        WHEN    Lev = 2
                        THEN    B
                        WHEN    Lev = 3
                        THEN    C
                        WHEN    Lev = 4
                        THEN    D
                END IS NOT NULL
        )
GROUP BY RN;

A  B  C  D
-- -- -- --
A  B  C  D
A1 A  C1 D1
   B1
&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<pre>
If I change your data a little bit:
CREATE table t5 as
SELECT  1 as ID, 'A' as A, to_char(null) as B, 'C' as C , to_char(null) as D
FROM    dual
UNION ALL
SELECT  2, to_char(null), 'B', to_char(null) as C ,'D'
FROM    dual
UNION ALL
SELECT  3, 'A1', 'A' as B, to_char(null) as C, 'D1'
FROM    dual
UNION ALL
SELECT 4, to_char(null) as A ,'B1', 'C1', to_char(null) as D
FROM dual;

SELECT * FROM t5;

        ID A  B  C  D
---------- -- -- -- --
         1 A     C
         2    B     D
         3 A1 A     D1  -------- this row is different
         4    B1 C1

your result will be:

A  B  C  D
-- -- -- --
A  B  C  D
A1 B1 C1 D1
   B1 C1

Here's my revised version:
SELECT  MAX(A) AS A,
        MAX(B) AS B,
        MAX(C) AS C,
        MAX(D) AS D
FROM   (SELECT row_number( ) OVER (PARTITION BY LEV ORDER BY ID) AS rn,
                DECODE(lev,1,A) A,
                DECODE(lev,2,B) B,
                DECODE(lev,3,C) C,
                DECODE(lev,4,D) D
        FROM    t5,(SELECT LEVEL lev FROM dual CONNECT BY LEVEL &lt;=4)
        WHERE
                CASE
                        WHEN    Lev = 1
                        THEN    A
                        WHEN    Lev = 2
                        THEN    B
                        WHEN    Lev = 3
                        THEN    C
                        WHEN    Lev = 4
                        THEN    D
                END IS NOT NULL
        )
GROUP BY RN;

A  B  C  D
-- -- -- --
A  B  C  D
A1 A  C1 D1
   B1
</pre>
]]></content:encoded>
	</item>
</channel>
</rss>

