我有12行年份和名称,但我想要年份1行和12个寄存器的名称(1或null)。
select id_agente, nombre, ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic
from (
(select
a.id_agente id_agente,
a.NOMBRE nombre,
case
when to_char (to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '01' then 1 end ene,
case
when to_char (to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '02' then 1 end feb,
..................
)
group by nombre, id_agente, ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic
order by nombre, id_agente, ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic;
我希望你帮助我,非常感谢你!
答案 0 :(得分:1)
这个常见问题有几种解决方案。
我认为还有其他一些解决方案,但我建议你选择4号。 我记得在开始时经常使用SQL遇到类似的问题,但它们现在就消失了。
我想你正在从错误的角度接近你的问题。
答案 1 :(得分:0)
一种方法,虽然详细,但是使用case语句定义每个聚合列作为要汇总的参数。然后,“group by”和“order by”子句只需要给出“id_agente”和“nombre”。我用Oracle数据多次使用过这种方法。
以下查询未经测试,并且做出了一些假设,但它至少应该是一个良好的开端。
select a.id_agente id_agente,
a.NOMBRE nombre,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '01' then 1 else 0 end) ene,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '02' then 1 else 0 end) feb,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '03' then 1 else 0 end) mar,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '04' then 1 else 0 end) abr,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '05' then 1 else 0 end) may,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '06' then 1 else 0 end) jun,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '07' then 1 else 0 end) jul,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '08' then 1 else 0 end) ago,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '09' then 1 else 0 end) sep,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '10' then 1 else 0 end) oct,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '11' then 1 else 0 end) nov,
sum(case when to_char(to_date(dec.FECHA_RECOGIDA_ORIGEN,'dd/mm/yyyy'),'mm') = '12' then 1 else 0 end) dic
from dec
group by id_agente,
nombre
order by id_agente,
nombre;
但是,如果输出格式需要是包含12个汇总列的单行,那么使用像Dark Anavger提到的数据透视查询可能是最正式的方法。
祝你好运!