Exibindo o Conjunto de Valores do objeto Fórmula utilizando transposição de linhas em colunas

Boa tarde,
Preciso exibir o conjunto de valores da fórmula, usei o exemplo do KB-86136, mas sem sucesso, a primeira parte em unir as tabelas deu certo mas tive que usar o comando INNER JOIN, mas a parte de converter em duas colunas os dados do campo TempID, não obtive sucesso.
Estou usando o banco stAccess.

Boa tarde Cassiano,

No exemplo do KB-86136, foi utilizado um banco de dados SQL Server.

Para um banco de dados Access, devemos utilizar uma função equivalente, o Transform:

TRANSFORM aggfunction
selectstatement
PIVOT pivotfield [IN ( valor1 [, valor2 [, …]])]

Com base no mesmo exemplo do artigo, a sintaxe para o banco Access ficaria de seguinte forma:

TRANSFORM (MIN(Formula_ValueData.Value))
SELECT Formula_Values.Name as Formulas
FROM Formula_Values INNER JOIN Formula_ValueData 
ON Formula_Values.[ID] = Formula_ValueData.[ValueID]
Group by Formula_Values.Name
PIVOT Formula_ValueData.TemplateID IN ('1', '2')

Sem%20t%C3%ADtulo

1 Like

Boa tarde Délio,

Inseri este código e deu certo somente nesta visualização, quando finalizei com OK, ocorreu o seguinte erro: “Ocorreu um erro na geração desta consulta. Verifique a configuração do objeto E3Query em uso”.
Outra coisa, tem como mostrar o nome do produto ao invés do ID?

Cassiano,

Com base na documentação da Microsoft e demais posts sobre a instrução TRANSFORM, gostaria de destacar o seguinte:

“Access doesn’t allow Transform + Pivot in subqueries.”

“IMO it’s impossible to use TRANSFORM as subquery, workaround as you know is use saved query…”

Avaliando a string que o E3 gera para retornar os campos da tabela:

SELECT TOP 1 * FROM (TRANSFORM (MIN(Formula_ValueData.Value))
SELECT Formula_Values.Name as Formulas
FROM Formula_Values INNER JOIN Formula_ValueData
ON Formula_Values.[ID] = Formula_ValueData.[ValueID]
Group by Formula_Values.Name
PIVOT Formula_ValueData.TemplateID IN (1, 2)
)

E testando por exemplo em outro cliente SQL (Syntax error in FROM clause.) contra um banco de dados, obtemos o mesmo erro que quando executamos a instrução no E3 (CreateRecordset FAILED - error(80040E14)).

Esse resultado é possível se na aba visualização de dados da Consulta limitarmos o retorno da consulta = 1.

Ou seja, este SQL da forma como foi escrito (utilizando Tranform e Pivot) esbarra nessas limitações de não ser possível inserir em um subquery.

Levando em conta as afirmações acima, não aconselhamos usar este tipo de instrução para obter esse resultado em se tratando de um banco MSAccess.
Indicamos utilizar um banco de dados SQL, conforme artigo KB-86136.