Soma de linhas no SQL


#1

Olá !

estou começando a me abituar com o SQL developer agora,
eu estava tentado montar um script de soma de linhas e não de colunas
Estou tentando alterar o valor com o UPDATE das linhas da minha coluna de preço=0 e inserior um valor somado de outras linhas, agrupando pela coluna de descrição. se alguém puder me ajudar eu agradeço muito.
Segue abaixo o script que comeceia a montar, mas n sei se está certo pois ele dá um erro dizendo “valores demais” : :cry:

UPDATE C_ORDER_LINE_TAX_VGRUPO
SET PRICEENTERED =
(SELECT DESCRIPTION,
SUM (PRICEENTERED)
FROM C_ORDER_LINETAX_V
GROUP BY DESCRIPTION)
WHERE PRICEENTERED=0;


#2

Bem vindo ao fórum …

Vamos lá, observe o seu comando:

Entre os parênteses, vc está selecionando dois valores - Description e a somatória do PriceEntered - por isso o erro.

Você está tentando atualizar uma coluna, com dois valores.

Substitua a sentença que está entre parênteses por:

SELECT
SUM (PRICEENTERED)
FROM C_ORDER_LINETAX_V
GROUP BY DESCRIPTION

De qualquer forma acredito que vc precisa especificar melhor a condição “WHERE”, pois desta forma ele vai somar todas as linhas da tabela C_ORDER_LINETAX_V, agrupando todas as Ordens/Pedidos.

Vale observar também, que no Compiere e no Adempiere tantos os pedidos de compra como os pedidos de venda ficam na mesma tabela.

Por isso, me parece, que você precisa filtrar um pouco melhor os registros que pretende somar.

Finalmente, não se acanhe… Vá postando suas mensagens e dúvidas aqui que nós vamos tentar ajudá-lo o máximo possível.

Um abraço,
Eduardo.


#3

obrigada pela resposta mais ainda assim ele aparece outro erro,
mensagem “não é permitida coluna virtual aqui”
mas a coluna que eu quero somar não é virtual. Mas acho que esse script não vai resolver meu problema, pq ele será aplicado a uma view.

e na próxima diga “vou ajudá-la” td bem!!! :laughing:


#4

então, vc está querendo fazer um UPDATE em uma view??

se for isso não tem como mesmo.

agora por curiosidade, o que vc está querendo fazer? ajustar o sistema para a realidade brasileira (cálculo de impostos)?

de uma olhada neste tópico, acho que pode te ajudar e em breve estaremos disponibilizando uma versão para download do sistema modificado com todos os cálculos de impostos e outras coisinhas como CFOP, NCM

[url:ad2d4]http://www.kenos.com.br/forum/viewtopic.php?f=7&t=10[/url:ad2d4]


#5

Opa,

Desculpe-me pelo “ajudá-lo”. :slight_smile:

Como o Mario disse, passe pra gente o que vc está pretendo fazer, que podemos te dar melhores dicas.

Um abraço,
Eduardo.


#6

Quer dizer que na view nunca vai dar certo!!! :cry:
O que eu quero fazer é somar preços das linhas da ordem de venda, pois o compiere só soma o tatal e eu quero um parcial. Pois meu produto é meio grupado, então grupei meu produto e somei.
Consegui com mto trabalho fazer um script que faz exatamente o que eu quero, mas quando vou dar o UPDATE ele dá um erro “não é permitida coluna virtual aqui” ele fala que é uma coluna virtual porque estou dando o UPDATE em uma view???

Olha aí o resultado do meu trabalho:

UPDATE C_ORDER_LINE_TAX_VGRUPO
SET [color=#4040FF:3a29c]PRICEENTERED [/color:3a29c]= (SELECT SUM(priceentered)
FROM c_order_linetax_v
WHERE description LIKE ‘filtrodedescrição%’
AND description = ANY
(SELECT description
FROM c_order_linetax_v
WHERE uomsymbol = ‘filtrodeuomsymbol’
GROUP BY description)
GROUP BY description);

:slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile:

Mas ainda preciso aplicar isso a minha view, a todas as linhas dessa coluna!!! algum sabe???


#7

[quote:83814]
UPDATE ele dá um erro “não é permitida coluna virtual aqui” ele fala que é uma coluna virtual porque estou dando o UPDATE em uma view???
[/quote:83814]
Isso mesmo, não dá para fazer o UPDATE em uma view, isso é um conceito de banco de dados.

Por que vc não cria uma tabela ao inves da view C_ORDER_LINE_TAX_VGRUPO, ou vc pode só criar uma tabela com o C_OrderLine_ID e o PriceEntered e na sua view vc pega esta valor, é uma outra de fazer o que vc está querendo.

sds, Mario


#8

Então eu crio a tabela no sql,
depois crio no compiere, essa tabela só vai servir para o FROM dessa minha view certo???

mas tenho outro problema, até consegui colocar a informação que quero na “coluna sql” dentro do compiere, porém, ele aplicado o resultado do meu select a todas as linhas dessa coluna, eu sei que é complicado.
Mas alguém sabe como fazer ele jogar na linhas que eu quero. acho q já dei esse parâmetro mas ele n entendeu!


#9

vc não precisa criar a tabela no compiere, só no banco.

mas antes de criar, deixa em ver se entendi, o que vc quer é só mostrar o valor na tela, se for isso é só criar uma Coluna SQL direto no Compiere, não precisa de uma view para mostrar, fica assim um exemplo

vc precisa colocar os ‘(’ e ‘)’ para funcionar.

esta é uma coluna SQL na C_OrderLine para mostrar a Condição de Pagamento da Ordem de Venda. OBS: Só vai aparecer o dado depois que vc salvar o registro.

(SELECT o.C_PaymentTerm_ID FROM C_Order o WHERE o.C_Order_ID = C_OrderLine.C_Order_ID)

sds, Mario


#10

Pois é eu quero mostrar o valor na tela na minha view , de modo que depois a impressão do documento tenha o resultado que quero.
Isso eu consegui, coloquei o meu select, no campo da “coluna SQL” e ele me deu o resultado, mas jogou o único resultado em todas as linhas, porém quando meu select traz + de uma linha de resultado, ele não aceita e dá um erro.
A única coisa que preciso agora é um parâmetro, para dizer ao compiere em que linhas eu quero meus resultados do select!!!

Será que isso é possível???

Valew pessoal pela ajuda até agora.!!!


#11

Ainda não consegui entender direito o que vc quer fazer. :question:

A coluna sql só pode receber UMA COLUNA e UMA LINHA como RESULTADO do SELECT senão não funciona, o parâmetro que vc deve usar é o C_OrderLine_ID que é a primary key da tabela.

sds, Mario


#12

Pois é eu somei as linhas e td mais agora queria jogar os resultados em algumas linhas específicas, até coloquei os parametros dessas linhas. mas ele não aceita. sei q o id da linha pode ajudar mas n sei onde encaixar ele no meu select!


#13

Cara nessantos,

Estou com dificuldade em entender o que você está tentado fazer, com isso fica muito difícil tentar ajudá-la.

Você não poderia escrever um breve “cenário” do que você pretende fazer para que possamos sugerir uma solução?

Seria legal se você conseguisse export aqui o que está tentando conseguir de resultado, por exemplo:

“Gostaria de exibir na Ordem de Venda, os valores totais dos produtos agrupados por categoria de produto - ou seja, ao concluir a criação do pedido o vendedor precisa ter uma forma simples de identificar quais Categorias de produto estão no pedido, e qual o valor cada categoria está totalizando”

Se você puder incluir algum screenshot dos campos que você criou e qual informação deveria ser apresentada em cada campo, também seria muito útil.

Um abraço,
Eduardo


#14

Em breve postarei informações a mais para vcs entenderem melhor
mas desde já agradeço todas as repostas e dicas q vcs me deram
valew!!!


#15

Oi pessoal obrigada por todas as respostas, finlamente com a ajuda de um amigo consegui.

O meu script estava certo , mas eu n estava aplicando no lugar certo!!!
E eu tinha que criar uma nova coluna para inserir o resultado da minha soma, e isso eu n estava fazendo.
Mas agora criei e deu certo.!!!


#16

Bom, o que eu queria basicamente era fazer um subtotal dos itens da linha de ordem, como na view só tinha a opção de
soma total, tive que alterar a tabela.
Primeiro criei uma nova view, uma “cópia” da view da linha de ordem c_order_linetax_v , para que eu pudesse jogar o script sem alterar a base. Eu havia criado o script corretamente o meu erro foi não criar uma nova coluna para os resultados, e não jogar o script no lugar certo. Mas enfim vejam aí como ficou o resultado, o primeiro select é do subtotal “unitário” do item, o segundo é o total geral da soma dos itens.

(SELECT SUM(PRICEENTERED) FROM C_ORDERLINE WHERE C_ORDER_LINETAX_V.UOMSYMBOL = ‘minhaunidadedemedida’ AND DESCRIPTION LIKE ‘minhadescrição’ AND C_ORDER_LINETAX_V.DESCRIPTION = DESCRIPTION AND C_ORDER_LINETAX_V.C_ORDER_ID = C_ORDER_ID) ZITEM ,
(SELECT SUM(PRICEENTERED)* MIN(QTYENTERED) FROM C_ORDERLINE WHERE C_ORDER_LINETAX_V.UOMSYMBOL = ‘critériodeunidadedemedida’ AND DESCRIPTION LIKE ‘critériodedescrição’ AND C_ORDER_LINETAX_V.DESCRIPTION = DESCRIPTION AND C_ORDER_LINETAX_V.C_ORDER_ID = C_ORDER_ID) ZPRECOFINAL

:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

Obrigada por todas as respostas!!!


#17

nessantos,

Legal, que bom que conseguiu fazer o que queria, espero que nossas dicas tenham ajudado.

Agora uma pergunta, você está vindo e/ou faz parte do mundo SAP? O que você tem achado do sistema (ADempiere / Compiere) até o momento?

Um abraço,
Eduardo Montenegro


#18

emontenegro

Reposdendo a primeira pergunta, nunca mechi com o SAP, sou nova nessa àrea. Agora em relação ao Compiere, acho que como ERP é bem completo pelo que pude ver até agora, a maior dificuldade é “tropicalizar” algumas funções, como impostos e outras. Como CRM ainda não uso as funções, mas pelo os itens que já vi parece atender basicamente a nossa necessidade.

Suas respostas foram úteis!!!