mn.@DuyHuynh。除非使用动态SQL,否则不能“隐藏”列。列在选择中明确指定。 select A, SUM(case when D = 3 then D end) as SUM_D1, SUM(case when D = 4 then

mn.@DuyHuynh。除非使用动态SQL,否则不能“隐藏”列。列在选择中明确指定。 select A, SUM(case when D = 3 then D end) as SUM_D1, SUM(case when D = 4 then ,sql,postgresql,aggregate-functions,Sql,Postgresql,Aggregate Functions,mn.@DuyHuynh。除非使用动态SQL,否则不能“隐藏”列。列在选择中明确指定。 select A, SUM(case when D = 3 then D end) as SUM_D1, SUM(case when D = 4 then D end) as SUM_D2) A SUM_D1 SUM_D2 ------------------- a1 100 NULL a1 200 NULL a3 NULL NULL a4 NULL

mn.@DuyHuynh。除非使用动态SQL,否则不能“隐藏”列。列在
选择中明确指定。
select A,
   SUM(case when D = 3 then D end) as SUM_D1,
   SUM(case when D = 4 then D end) as SUM_D2)
A    SUM_D1  SUM_D2
-------------------
a1   100     NULL
a1   200     NULL
a3   NULL    NULL
a4   NULL    NULL
A   SUM_D1 
-----------
a1   100 
a1   200 
select A,
   SUM(case when D = 3 then D end) as SUM_D1,
   SUM(case when D = 4 then D end) as SUM_D2
 from
    Table1
 group by
     A
 having 
     (case when D = 3 or D = 4 then D end) is not null
select A,
   SUM(case when D = 3 then D end) as SUM_D1,
   SUM(case when D = 4 then D end) as SUM_D2)
where D is not null
select A,
       coalesce(sum(case when D = 3 then D end),
                sum(case when D = 4 then D end)
               ) as sum_d
from t
group by A
having sum(case when d in (3, 4) then 1 else 0 end) > 0;
select a,
       array_agg(d order by d) as ds,
       array_agg(sumd order by d) as sumds
from (select a, d, sum(d) as sumd
      from t
      where d in (3, 4)
      group by a, d
     ) d
group by a;
select *
from 
 (
    select A,
       SUM(case when D = 3 then D end) as SUM_D1,
       SUM(case when D = 4 then D end) as SUM_D2)
    ...
 ) as dt
where SUM_D1 is not null 
  and SUM_D2 is not null
select A,
   SUM(case when D = 3 then D end) as SUM_D1,
   SUM(case when D = 4 then D end) as SUM_D2)
...
where D in (3,4)