SQL EM VB - ME PRECIPITEI
Boa tarde galera!!!
Primeiro gostaria de pedir desculpas por encerrar o tópico, antes de fazer todos os testes. Fui precipitado, mas isso não irá mais acontecer.
Pois bem....Voltando ao tópico.
Vou postar a instrucao que fiz e o resultado
Instrução:
Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario1 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario1 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario1 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario1 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Union
Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario2 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario2 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario2 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario2 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Union
Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario3 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario3 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario3 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario3 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Resultado:
empresas caixanumeros datamvto sequ dcto complemento serie operacao Nume1Entr VlrNume1Entr Nume1Said VlrNume1Said transacao
1 6 03/05/2007 2017 1 PG DUPLICATAS (null) S 0 1764.29 4 - BAIXA CONTAS A PAGAR
1 6 03/05/2007 2018 1 PG DUPLICATAS (null) S 0 535.00 4 - BAIXA CONTAS A PAGAR
1 6 03/05/2007 2017 1 PG DUPLICATAS (null) S 1 1000.00 4 - BAIXA CONTAS A PAGAR
1 6 03/05/2007 2018 1 PG DUPLICATAS (null) S 1 1000.00 4 - BAIXA CONTAS A PAGAR
1 6 03/05/2007 2017 1 PG DUPLICATAS (null) S 0.00 4 - BAIXA CONTAS A PAGAR
1 6 03/05/2007 2018 1 PG DUPLICATAS (null) S 4 1000.00 4 - BAIXA CONTAS A PAGAR
Pergunto:
- Tem como depois disso tudo agrupar por: empresas + caixanumeros + datamvto + sequ + dcto
[S51][S51][S51][S51][S51][S51]
Primeiro gostaria de pedir desculpas por encerrar o tópico, antes de fazer todos os testes. Fui precipitado, mas isso não irá mais acontecer.
Pois bem....Voltando ao tópico.
Vou postar a instrucao que fiz e o resultado
Instrução:
Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario1 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario1 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario1 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario1 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Union
Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario2 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario2 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario2 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario2 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Union
Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario3 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario3 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario3 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario3 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Resultado:
empresas caixanumeros datamvto sequ dcto complemento serie operacao Nume1Entr VlrNume1Entr Nume1Said VlrNume1Said transacao
1 6 03/05/2007 2017 1 PG DUPLICATAS (null) S 0 1764.29 4 - BAIXA CONTAS A PAGAR
1 6 03/05/2007 2018 1 PG DUPLICATAS (null) S 0 535.00 4 - BAIXA CONTAS A PAGAR
1 6 03/05/2007 2017 1 PG DUPLICATAS (null) S 1 1000.00 4 - BAIXA CONTAS A PAGAR
1 6 03/05/2007 2018 1 PG DUPLICATAS (null) S 1 1000.00 4 - BAIXA CONTAS A PAGAR
1 6 03/05/2007 2017 1 PG DUPLICATAS (null) S 0.00 4 - BAIXA CONTAS A PAGAR
1 6 03/05/2007 2018 1 PG DUPLICATAS (null) S 4 1000.00 4 - BAIXA CONTAS A PAGAR
Pergunto:
- Tem como depois disso tudo agrupar por: empresas + caixanumeros + datamvto + sequ + dcto
[S51][S51][S51][S51][S51][S51]
Crie uma View com todas essas informações.
Ai na hora de chamar a view vc da esse seu GroupBy "Geral"...
Mas creio que para um select dete nÃÂÂvel, talvez seja mais aconselhado até a criação de uma Procedure ou algo do gênero.
Ai na hora de chamar a view vc da esse seu GroupBy "Geral"...
Mas creio que para um select dete nÃÂÂvel, talvez seja mais aconselhado até a criação de uma Procedure ou algo do gênero.
Xi MARCELOHF, danou-se........
Complicado pra mim, mesmo assim valeu.
Vou estudar mais alguma coisa.
Obrigado e abraços.
Complicado pra mim, mesmo assim valeu.
Vou estudar mais alguma coisa.
Obrigado e abraços.
VC utilizando o UNION, funciona como se VC estivesse rodando 3 selectes e juntando em um recordset só.
VC não consegue fazer um tratamento de GROUP BY das 3 cláusulas juntas em 1 só.
A melhor solução é a criação de uma VIEW mesmo, e na hora que VC chamar esta VIEW, VC faz assim no seu código:
Select * from VIEW group by campos
Essa é a melhor solução pra tÃÂÂ.
PROCEDURE acredito não ser necessário, pois a cláusula é até simples pra ser chamada a toda hora na sua aplicação. Uma VIEW mesmo atenderia ao seu problema.
VC não consegue fazer um tratamento de GROUP BY das 3 cláusulas juntas em 1 só.
A melhor solução é a criação de uma VIEW mesmo, e na hora que VC chamar esta VIEW, VC faz assim no seu código:
Select * from VIEW group by campos
Essa é a melhor solução pra tÃÂÂ.
PROCEDURE acredito não ser necessário, pois a cláusula é até simples pra ser chamada a toda hora na sua aplicação. Uma VIEW mesmo atenderia ao seu problema.
Seguinte: eu coloquei um ORDER BY a ultima linha e ordenou legal como eu queria.
Agora...não sei como se cria uma VIEW.
é facil?
Agora...não sei como se cria uma VIEW.
é facil?
tenta assim:
select caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento, complemento, serie, operacao, Nume1Entr, VlrNume1Entr, Nume1Said, VlrNume1Said
from
(Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario1 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario1 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario1 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario1 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Union
Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario2 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario2 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario2 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario2 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Union
Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario3 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario3 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario3 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario3 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia) as tabela1
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Não teste por não ter a base, mas acho que deve funcionar.
Abs.
select caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento, complemento, serie, operacao, Nume1Entr, VlrNume1Entr, Nume1Said, VlrNume1Said
from
(Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario1 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario1 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario1 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario1 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Union
Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario2 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario2 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario2 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario2 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Union
Select Distinct caixalancamentos.empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia, documento,
complemento, serie, caixatransacoes.operacao,
case when caixatransacoes.operacao='E' then numerario3 end as Nume1Entr,
case when caixatransacoes.operacao='E' then vlnumerario3 end as VlrNume1Entr,
case when caixatransacoes.operacao='S' then numerario3 end as Nume1Said,
case when caixatransacoes.operacao='S' then vlnumerario3 end as VlrNume1Said,
Left(Concat(empresas.codigo," - ",empresas.nome),34) As empresanome,
Left(Concat(caixatransacoes.codigo, " - ", caixatransacoes.descricao), 50) As nometransacao
From caixalancamentos
Join empresasdogrupo On (empresasdogrupo.empresas_codigo = caixalancamentos.empresas_codigo)
Join empresas On (empresas.codigo = empresasdogrupo.empresas_codigo)
Join caixatransacoes On (caixatransacoes.codigo = caixatransacoes_codigo)
Where (empresasdogrupo.grupoempresas_codigo=1)
And (dtmovimento between '2007-05-03' And '2007-05-03')
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia) as tabela1
Group By empresas_codigo, caixanumeros_codigo, dtmovimento, sequencia
Não teste por não ter a base, mas acho que deve funcionar.
Abs.
Abra o ENTERPRISE MANAGER, logue-se no servidor.
Vá até a sua BASE DE DADOS;
Abra a Base de Dados (clicando no sinal de + do lado esquerdo)
a terceira opção que vai aparecer é VIEW. Dê um clique sobre ele.
Na área maior, clique com o botão direito e NEW VIEW...
Copie este seu código FUNDIONANDO e coloque lá.
SALVE a sua view e pronto. FECHE-A.
FECHE o ENTERPRISE MANAGER.
Abra o SQL QUERY ANALISER
LOGUE-SE
CHEGUE até o seu servidor
Use a seguinte linha de comando, para ver o resultado de usa VIEW.
VC verá que ele te trará o resultado que VC tinha antes rodando o SQL que colocou lá.
Agora, mude esta linha de comando para essa:
Veja se te atende. Se não atender, abra a view e a altere, ou mude o seu group by... Sei lá...
VC fazendo assim, ele "entende implicitamente" que essa VIEW é uma TABELA.
Quanto a atualização desta VIEW, VC não precisa esquentar a cabeça, pois como ela têm só SELECT, então SEMPRE na hora que ela for chamada, será rodado este SELECT e te mostrará os dados como se fosse uma tabela normal CRIADA por tÃÂÂ.
Alguma dúvida???
Vá até a sua BASE DE DADOS;
Abra a Base de Dados (clicando no sinal de + do lado esquerdo)
a terceira opção que vai aparecer é VIEW. Dê um clique sobre ele.
Na área maior, clique com o botão direito e NEW VIEW...
Copie este seu código FUNDIONANDO e coloque lá.
SALVE a sua view e pronto. FECHE-A.
FECHE o ENTERPRISE MANAGER.
Abra o SQL QUERY ANALISER
LOGUE-SE
CHEGUE até o seu servidor
Use a seguinte linha de comando, para ver o resultado de usa VIEW.
SELECT * from [nome da sua view salva acima]
VC verá que ele te trará o resultado que VC tinha antes rodando o SQL que colocou lá.
Agora, mude esta linha de comando para essa:
SELECT * from [nome da sua view salva acima] GROUP BY [campos que deseja agrupar]
Veja se te atende. Se não atender, abra a view e a altere, ou mude o seu group by... Sei lá...
VC fazendo assim, ele "entende implicitamente" que essa VIEW é uma TABELA.
Quanto a atualização desta VIEW, VC não precisa esquentar a cabeça, pois como ela têm só SELECT, então SEMPRE na hora que ela for chamada, será rodado este SELECT e te mostrará os dados como se fosse uma tabela normal CRIADA por tÃÂÂ.
Alguma dúvida???
CREATE VIEW NomeVisão (nome dos campos separados por virgula)
AS
<<<query>>>
GO
Pergunta:
Por que criar um visão num query com valores estáticos (grupoempresas_codigo e dtmovimento) ???
Numa situação dessa o ideal é criar uma função no SQL Server, pois uma função pode retornar um recordset e suporta passagem de parâmetros.
PS: Atenção no uso do CASE: Via de regra não existe CASE sem ELSE, isto equivale ao uso de IF sem ELSE a não atenção nessa regra é pedir para encontar problemas no futuro.
AS
<<<query>>>
GO
Pergunta:
Por que criar um visão num query com valores estáticos (grupoempresas_codigo e dtmovimento) ???
Numa situação dessa o ideal é criar uma função no SQL Server, pois uma função pode retornar um recordset e suporta passagem de parâmetros.
PS: Atenção no uso do CASE: Via de regra não existe CASE sem ELSE, isto equivale ao uso de IF sem ELSE a não atenção nessa regra é pedir para encontar problemas no futuro.
Beleza pessoa...obrigado pelas dicas.
Abraços.
Abraços.
Tópico encerrado , respostas não são mais permitidas