Ir para conteúdo

POWERED BY:

Arquivado

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

May Salvador

uso de PIVOT

Recommended Posts

Olá todos!

Estou precisando usar a função de PIVOT no SQL Server e, apesar de toda pesquisa que fiz por aí não consigo fazer com que dê certo.

A query é a seguinte:

SELECT
	*
FROM
	(
	SELECT
		SJTR.COMPONENT_NAME, SJTR.RESULT_VALUE
		, SJTR.SAMPLE_PRAZO, SJTR.ID_NUMERIC, SJTR.ID_TEXT, SJTR.JOB_NAME
		, SJTR.SAMPLE_IDADE, SJTR.SAMPLE_ABATIMENTO, SJTR.SAMPLE_REFERENCIA
	FROM SAMP_JOB_TEST_RESULT SJTR
	)PS
	PIVOT
	(
	MAX(PS.RESULT_VALUE) FOR PS.SAMPLE_IDADE
		IN ([IDADE1],[IDADE2],[IDADE3],[IDADE4],[IDADE5])
	)PVT

SAMP_JOB_TEST_RESULT é uma view, o campo PS.RESULT_VALUE é float e PS.SAMPLE_IDADE é nvarchar.

 

O erro que aparece é o seguinte:

Mensagem 8114, Nível 16, Estado 1, Linha 34
Error converting data type nvarchar to int.
Mensagem 473, Nível 16, Estado 1, Linha 34
The incorrect value "IDADE1" is supplied in the PIVOT operator.

 

Obrigada desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece uma incompatibilidade de types entre

MAX(PS.RESULT_VALUE) FOR PS.SAMPLE_IDADE

 

e ([iDADE1],[iDADE2],[iDADE3],[iDADE4],[iDADE5])

 

Não conheço a síntaxe mas creio que IDADE1 ... 5 sejam parametros

PS.SAMPLE_IDADE é coluna ?
PS.RESULT_VALUE é comando ? coluna virtual ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma olhada então na view, pois pode ter algum convert lá dentro em um campo varchar, sofro com isso todo dia aqui no sistema....

 

Verifique se esse trecho retorna dados

 

SELECT

SJTR.COMPONENT_NAME, SJTR.RESULT_VALUE

, SJTR.SAMPLE_PRAZO, SJTR.ID_NUMERIC, SJTR.ID_TEXT, SJTR.JOB_NAME

, SJTR.SAMPLE_IDADE, SJTR.SAMPLE_ABATIMENTO, SJTR.SAMPLE_REFERENCIA

FROM SAMP_JOB_TEST_RESULT SJTR

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi também estou tendo problema com o meu ..

Preciso inserir os dados por ID, na tabela.

 

 

--(Colunas ta tabela destino)
SELECT servidor, instalacao, inicializacao, memoria_total, memoria_disponivel, memoria_virtual_maximo, memoria_virtual_disponivel, memoria_virtual_uso
FROM
-- (Colunas da tabela Origem)
( SELECT ID, NOME, DESCRIÇÃO
FROM #ARQ_DADOS)
UNPIVOT
(NOME FOR ID IN (2,11,12,25,26,27, 28, 29)
Esta dando erro de sintaxe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sei que muita gente se perde com o uso do PIVOT.

Tenho dois exemplos que geralmente uso para demonstrar seu uso, uma delas com o STUFF:

 

CREATE TABLE #acordos (num_acordo INT, parcela INT, vencimento SMALLDATETIME, valor MONEY) INSERT INTO #acordos VALUES (1, 1, '2012-12-14 00:00:00', 404.26)INSERT INTO #acordos VALUES (1, 2, '2013-01-14 00:00:00', 404.26)INSERT INTO #acordos VALUES (1, 3, '2013-02-14 00:00:00', 404.26)INSERT INTO #acordos VALUES (1, 4, '2013-03-14 00:00:00', 404.26)INSERT INTO #acordos VALUES (1, 5, '2013-04-14 00:00:00', 404.26)INSERT INTO #acordos VALUES (3, 1, '2012-12-17 00:00:00', 371.67)INSERT INTO #acordos VALUES (3, 2, '2013-01-17 00:00:00', 371.67)INSERT INTO #acordos VALUES (3, 3, '2013-02-18 00:00:00', 371.67)INSERT INTO #acordos VALUES (3, 4, '2013-03-18 00:00:00', 371.67)INSERT INTO #acordos VALUES (3, 5, '2013-04-17 00:00:00', 371.67) SELECT  num_acordo,        [1],        [2],        [3],        [4],        [5]  FROM    #acordos PIVOT (MIN(vencimento) FOR parcela IN ([1], [2], [3], [4], [5]) ) p DROP TABLE #acordos  declare @venda table (ano int, mes int, valor numeric(9,2))   insert @venda values (2003, 2, 10)insert @venda values (2003, 2, 1)   insert @venda values (2003, 3, 20)insert @venda values (2003, 4, 30)insert @venda values (2004, 1, 40)insert @venda values (2004, 2, 50)insert @venda values (2004, 3, 60)insert @venda values (2004, 4, 70)insert @venda values (2005, 1, 80)  /*****************SQL 2000*****************/select  ano         , mes_1 = sum(case when mes=1 then valor end)         , mes_2 = sum(case when mes=2 then valor end)         , mes_3 = sum(case when mes=3 then valor end)         , mes_4 = sum(case when mes=4 then valor end)from @vendagroup by anoorder by ano;  /*************************SQL 2005 // SQL 2008*************************/ Select ano         , [1] as Jan         , [2] as Fev         , [3] as Mar         , [4] as Abrfrom @venda pivot (sum(valor) for mes in ([1],[2],[3],[4])) porder by 1; 
declare @Tabela table(COL1 varchar(10), COL2 int, COL3 int, COL4 int); insert into @Tabela values('AAAA', 2012,        1,        72),('AAAA', 2012,        2,        73),('BBBB', 2012,        3,        69),('BBBB', 2012,        4,        67),('CCCC', 2012,        5,        76),('AAAA', 2012,        5,        76),('CCCC', 2012,        6,        65),('CCCC', 2012,        7,        81),('BBBB', 2012,        8,        75),('CCCC', 2012,        9,        67),('AAAA', 2012,       10,        72),('AAAA', 2012,       11,        72); SELECT * FROM @Tabela   SELECT DISTINCT    STUFF( (SELECT ',' + s.COL1            FROM @Tabela as s            WHERE                 s.COL2 = t.COL2 AND                s.COL3 = t.COL3 AND                s.COL4 = t.COL4            FOR XML PATH(''), TYPE).value('.', 'varchar(max)')            ,1, 1, '') as COL1,    t.COL2,     t.COL3,    t.COL4FROM @Tabela AS tORDER BY     t.COL2,    t.COL3

A ambas as pessoas que estão tendo problemas, deem uma olhada e testem. Estou sem ambiente para simular com a estrutura nos posts anteriores.

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.