SQL EM VB - ME PRECIPITEI

JB207 09/08/2007 15:08:58
#230251
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]
USUARIO.EXCLUIDOS 09/08/2007 15:12:02
#230252
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.
JB207 09/08/2007 15:25:23
#230253
Xi MARCELOHF, danou-se........
Complicado pra mim, mesmo assim valeu.
Vou estudar mais alguma coisa.
Obrigado e abraços.

LCSD 09/08/2007 17:18:18
#230286
Resposta escolhida
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.
JB207 09/08/2007 17:38:06
#230297
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?



USUARIO.EXCLUIDOS 09/08/2007 17:40:47
#230299
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.
LCSD 09/08/2007 17:47:01
#230301
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.

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???
USUARIO.EXCLUIDOS 09/08/2007 17:48:45
#230303
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.

JB207 09/08/2007 18:35:47
#230308
Beleza pessoa...obrigado pelas dicas.
Abraços.

Tópico encerrado , respostas não são mais permitidas