If sql-server
then just copy the result set what you are getting to a temp table and then try the following query.
Use dynamic sql.
Compare the total count of rows with total rows having null.
If both the counts are same then exclude that particular column else include.
Query
SELECT WC_WARD_CATEGORY,
MAX(CASE WHEN months = 'JAN' THEN BOR END) JAN,
MAX(CASE WHEN months = 'FEB' THEN BOR END) FEB,
MAX(CASE WHEN months = 'MAR' THEN BOR END) MAR,
MAX(CASE WHEN months = 'APR' THEN BOR END) APR,
MAX(CASE WHEN months = 'MAY' THEN BOR END) MAY,
MAX(CASE WHEN months = 'JUN' THEN BOR END) JUN,
MAX(CASE WHEN months = 'JUL' THEN BOR END) JUL,
MAX(CASE WHEN months = 'AUG' THEN BOR END) AUG,
MAX(CASE WHEN months = 'SEP' THEN BOR END) SEP,
MAX(CASE WHEN months = 'OCT' THEN BOR END) OCT,
MAX(CASE WHEN months = 'NOV' THEN BOR END) NOV,
MAX(CASE WHEN months = 'DEC' THEN BOR END) DEC
INTO #temp
FROM bor2
GROUP BY WC_WARD_CATEGORY;
Then,
declare @strsql varchar(max)
set @strsql = 'select '
set @strsql +=
(select case when (select COUNT(*) from #temp where JAN is null )
<> (select count(*) from #temp ) then 'JAN, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where FEB is null)
<> (select count(*) from #temp ) then 'FEB, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where MAR is null)
<> (select count(*) from #temp ) then 'MAR, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where APR is null)
<> (select count(*) from #temp ) then 'APR, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where MAY is null)
<> (select count(*) from #temp ) then 'MAY, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where JUN is null)
<> (select count(*) from #temp ) then 'JUN, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where JUL is null)
<> (select count(*) from #temp ) then 'JUL, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where AUG is null)
<> (select count(*) from #temp ) then 'AUG, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where SEP is null)
<> (select count(*) from #temp ) then 'SEP, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where OCT is null)
<> (select count(*) from #temp ) then 'OCT, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where NOV is null)
<> (select count(*) from #temp ) then 'NOV, ' else '' end)
set @strsql +=
(select case when (select COUNT(*) from #temp where DEC is null)
<> (select count(*) from #temp ) then 'DEC, ' else '' end)
set @strsql = LEFT(@strsql,len(@strsql) -1)
set @strsql += ' from #temp'
exec (@strsql)