Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andremarianos

PIVOT sem <aggregation function>, tem como?

Recommended Posts

Olá pessoal,

 

Já tem alguns dias que estou quebrando a cabeça e não consigo encontrar uma solução, a situação é a seguinte:

 

Tenho uma tabela que armazena as informações de um formulário em linha, porém preciso gerar um relatório onde estas informações sejam mostradas em coluna, a solução que tenho para realizar esta operação é o PIVOT porém, as informações estão dispostas da seguinte forma:

 

https://www.hidrive.strato.com/lnk/MABBoDqq

 

Preciso que sejam exibidas desta forma:

 

https://www.hidrive.strato.com/lnk/VGhBIHjU

 

Onde: [1] é a Data de Vencimento, [2] é o Valor, [3] é a Situação, [4] é a Data Recebimento e [5] Observações.

 

Tentei da Seguinte forma:

 

select CC.OrcamentoID,CC.Versao,CC.CompID,[1] DataVencto,[2] Valor,[3] Situacao,[4] DtPagamento,[5] Obs
from ComplementoColunas PIVOT (SUM(ColunaValor) for ColunaID in ([1],[2],[3],[4],[5]))CC
Mais, retorna a mensagem de erro:
Msg 8117, Level 16, State 1, Line 1
O tipo de dados de operando nvarchar é inválido para o operador sum.
De fato, ColunaValor tem vários tipos de dados e não posso usar o SUM para agrupar as informações, qual seria a outra opção. Como posso resolver esta questão?

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, André! tranquilo?

 

Use outra função de agregação, coloque o Max() no lugar do sum que dá certo, segue um exemplo de pivot com caracteres diferentes de numeros...

 

if object_id('tempdb..#testepivot') is not null
drop table #testepivot
create table #testepivot (a int identity, b varchar(10))
go
insert into #testepivot values ('a')
insert into #testepivot values ('b')
insert into #testepivot values ('c')
insert into #testepivot values ('d')
insert into #testepivot values ('e')
select
[1],
[2],
[3],
[4],
[5]
from
#testepivot
pivot(max( b ) for a in ([1],[2],[3],[4],[5])) pvt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta!

 

Tentei das seguintes formas porém, não deu certo:

 

1 - SELECT CC.OrcamentoID,CC.Versao,CC.CompID,[1] DataVencto,[2] Valor,[3] Situacao,[4] DtPagamento,[5] Obs

FROM ComplementoColunas PIVOT (CAST(ColunaValor AS INT) FOR ColunaID in ([1],[2],[3],[4],[5]))CC
Mensagem de erro: Msg 195, Level 15, State 1, Line 2
'CAST' não é um função de agregação reconhecido.
2 - SELECT CC.OrcamentoID,CC.Versao,CC.CompID,CAST([1] as int) DataVencto,CAST([2] as int) Valor,CAST([3] as int) Situacao,CAST([4] as int) DtPagamento,CAST([5] as int) Obs
FROM ComplementoColunas PIVOT (SUM(ColunaValor) FOR ColunaID in ([1],[2],[3],[4],[5]))CC
Mensagem de erro: Msg 8117, Level 16, State 1, Line 1
O tipo de dados de operando nvarchar é inválido para o operador sum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, consegui resolver, não foi necessário usar o PIVOT

 

Segue abaixo a solução:

 

SELECT
O.ContaID,U.UsuRazaoSocial,O.OrcamentoID,O.Versao Versao,O.StatusID,O.CertezaVendaID,
CC.ColunaValor AS Vencimento,CC1.ColunaValor AS Valor,CC2.ColunaValor AS Situação,
CC3.ColunaValor AS DTRecebimento,CC4.ColunaValor AS Observação
FROM CRMOrcamento O
INNER JOIN Usuario U ON O.ContaID = U.UsuID
INNER JOIN ComplementoColunas CC ON CC.OrcamentoID = O.OrcamentoID and CC.Versao = O.Versao
INNER JOIN ComplementoColunas CC1 ON CC1.OrcamentoID = O.OrcamentoID and CC1.Versao = O.Versao
INNER JOIN ComplementoColunas CC2 ON CC2.OrcamentoID = O.OrcamentoID and CC2.Versao = O.Versao
INNER JOIN ComplementoColunas CC3 ON CC3.OrcamentoID = O.OrcamentoID and CC3.Versao = O.Versao
INNER JOIN ComplementoColunas CC4 ON CC4.OrcamentoID = O.OrcamentoID and CC4.Versao = O.Versao
AND O.StatusID = '9'
AND O.CertezaVendaID = '9'
AND CC.ColunaID = '1'
AND CC1.ColunaID = '2'
AND CC2.ColunaID = '3'
AND CC3.ColunaID = '4'
AND CC4.ColunaID = '5'
AND CC1.LinhaID = CC.LinhaID
AND CC2.LinhaID = CC.LinhaID
AND CC3.LinhaID = CC.LinhaID
AND CC4.LinhaID = CC.LinhaID
GROUP BY CC.CompColID,CC.LinhaID,O.ContaID,U.UsuRazaoSocial,O.OrcamentoID,O.StatusID,O.CertezaVendaID,
O.Versao,CC1.ColunaValor,CC.ColunaValor,CC2.ColunaValor,CC3.ColunaValor,CC4.ColunaValor

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.