如果是
sql-server
,则只需将结果集复制到临时表中,然后尝试以下查询。
使用动态SQL。
比较总行数与具有空值的总行数。
如果两个计数相同,则排除该特定列,否则包含该列。
查询:
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;
那么,
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)