Array
(
)

Query complexa para ignorar o group by com data

Pjava
   - 19 nov 2013

Preciso fazer uma query assim. Hoje tenho, por exemplo uma situação em três linhas e as informações vêm de uma coluna. Como necessito exportar para o excel, necessito transformar essas três linhas e uma coluna em uma linha e três colunas. Bem, isso eu fiz, conforme a query abaixo. Acontece que eu também necessito trazer um campo data e não posso agrupar a data, já que eu tenho função agregada. Logo como eu faço para colocar a data sem que minha query passe pelo agrupamento?
Abaixo a query que até então funciona.
select c.ID_CONTA ,
'primeiro' = sum(case when i.ordem = 1 then i.COD_TIPO_TAB else 0 end) ,
'primeiro1' = sum(case when i.ordem = 1 then i.VL_TOT_ITEM else 0 end) ,
'segundo' =sum(case when i.ordem = 2 then i.COD_TIPO_TAB else 0 end) ,
'segundo1' =sum(case when i.ordem = 2 then i.VL_TOT_ITEM else 0 end) ,
sum(case when i.ordem = 3 then i.COD_TIPO_TAB else 0 end) ,
sum(case when i.ordem = 3 then i.VL_TOT_ITEM else 0 end) ,
sum(case when i.ordem = 4 then i.COD_TIPO_TAB else 0 end) ,
sum(case when i.ordem = 4 then i.VL_TOT_ITEM else 0 end) ,
sum(case when i.ordem = 5 then i.COD_TIPO_TAB else 0 end) ,
sum(case when i.ordem = 5 then i.VL_TOT_ITEM else 0 end) ,
sum(case when i.ordem = 6 then i.COD_TIPO_TAB else 0 end) ,
sum(case when i.ordem = 6 then i.VL_TOT_ITEM else 0 end)
from CONTA c
join (select ID_CONTA, ordem=ROW_NUMBER() over (order by COD_TIPO_TAB desc), COD_TIPO_TAB, VL_TOT_ITEM from ITEM
where ID_CONTA = 684315822
) as i
on i.ID_CONTA = c.ID_CONTA
where c.ID_CONTA = 684315822
group by c.ID_CONTA

Isaac Jose
   - 19 nov 2013

bom dia esta cedo adinda e nao entendi direito a questao ... se vc tiver o campo com a data pode puxar o mesmo em um case..
ex..

select

pessoa = case when clie_ipssoa_coplt = 'Gabriel j then 'teste'
end,
data = case when clie_ipssoa_coplt = 'Gabriel j then dt_abertura
end,
xx,c,dt_abertura
from tb_ccms_atual
where jun =xx and c = 55
group by xx,c,dt_abertura,clie_ipssoa_coplt

resultado..

pessoa data jun c dt_abertura
teste 2013-09-23 xx 55 2013-09-23

ou se quer construir a data..

select
Data_Renegociação = case when agrupamento = 'renegociação' then GETDATE()
end,
sum(QtdContrEstoque)as QtdContrEstoque
from TB_TESTE
where Agencia = 3 and Agrupamento = 'renegociação'
group by QtdContrEstoque,agrupamento

resultado..

Data_Renegociação QtdContrEstoque
2013-11-19 09:38:10.057 0
2013-11-19 09:38:10.057 1
2013-11-19 09:38:10.057 15880000000000000
2013-11-19 09:38:10.057 36040000000000000
2013-11-19 09:38:10.057 45310000000000000
2013-11-19 09:38:10.057 65450000000000002
2013-11-19 09:38:10.057 67290000000000001

eu acho que é mais ou menos isso. espero ter ajudado ou caso nao tenha deixar maiores detalhes para que talvez possa ajuda-lo

ate mais..

Pjava
   - 19 nov 2013

Eu também estou confuso em como colocar para vocês, mas acho que usando o Pivot table vai me resolver, pois o que preciso é transforma tres linhas em uma e uma coluna em três, mas a data tem sido o empecilho. Estou estudando o Pivot table para poder usar.

Isaac Jose
   - 19 nov 2013

vc tem o campo data???
se tiver chama ele em um case que recebe a propria data como valor...

Pjava
   - 19 nov 2013

Então, fiz isso e está me pedindo um Group By e é isso que zoa tudo. Fiz usando Last() e dessa forma funciona, pois é uma agregada e logo não preciso adicionar no Group By, mas ainda acho que Pivot deixa o código mais limpo.

Jefferson Santos
   - 19 nov 2013

Como informado a cima altere qualquer campo com a utilização do CASE para varchar tente o uso do distinct.