Array
(
)

Problemas no select

Mr_joni
   - 26 nov 2003

Ola a todos...

Tenho 2 tabelas com as seguintes estruturas:

Tabela: Relatorio_visitas
codusuario, int
data_visita, datetime
tipo_visita, nvarchar(50)

Tabela: relatorio_visitas_tipo
codvisita: int
titulo: nvarchar(50)

A tabela relatorio_visitas_tipo tem os seguintes dados:
codvisita: 1 titulo: problemas
codvisita: 2 titulo: venda
codvisita: 3 titulo: demonstracao
codvisita:4 titulo: instalacao

o usuario entra com o seguintes dados na tabela relatorio_visitas:
codusuario: 16 data_visita: 20/11/2003 tipo_visita: 3
codusuario: 16 data_visita: 21/11/2003 tipo_visita: 1, 2
codusuario: 16 data_visita: 21/11/2003 tipo_visita: 2
codusuario: 14 data_visita: 22/11/2003 tipo_visita: 1, 2, 4
codusuario: 16 data_visita: 22/11/2003 tipo_visita: 2, 3
codusuario: 14 data_visita: 22/11/2003 tipo_visita: 4
codusuario: 16 data_visita: 23/11/2003 tipo_visita: 1, 2, 3, 4
codusuario: 14 data_visita: 23/11/2003 tipo_visita: 3

a questao e a seguinte com eu faco para procurar todos os registro do usuario com o codigo 16 e separar e agrupar e totalizar os tipos de visitas. O resultado q eu espero e este:
codusuario: 16 data_visita: 20/11/2003 codvisita: 3 totvisitas: 1
codusuario: 16 data_visita: 21/11/2003 codvisita: 1 totvisitas: 1
codusuario: 16 data_visita: 21/11/2003 codvisita: 2 totvisitas: 2
codusuario: 16 data_visita: 22/11/2003 codvisita: 2 totvisitas: 1
codusuario: 16 data_visita: 22/11/2003 codvisita: 3 totvisitas: 1
codusuario: 16 data_visita: 23/11/2003 codvisita: 1 totvisitas: 1
codusuario: 16 data_visita: 23/11/2003 codvisita: 2 totvisitas: 1
codusuario: 16 data_visita: 23/11/2003 codvisita: 3 totvisitas: 1
codusuario: 16 data_visita: 23/11/2003 codvisita: 4 totvisitas: 1

Obrigado.

Marcelo.c
   - 04 dez 2003

Caro Colega,

Não me recordo totalmente, mas a principio, você terá que fazer um
select indicando os campos desejados, e agrupando-os pelo campo do quel você quer o Grupo de informações, em seguida, a soma da quantidade de itens de cada grupo deverá ser feita pela cláusula With rollup

mais ou menos assim:

Select campo1, campo2,campo3,campo4 from ´NOME TABELA´
---(Caso queira alguma condição, informar a clausula ´WHERE´)
GROUP BY campo1..2..3..ou 4 --- (para agrupar os dados desejados )
WITH ROLLUP ----(para contagem registros dos campos agrupados)

Fabricio_saldanha
   - 09 dez 2003

Caro Colega,

não sei se entendi direito mas o seu campo tipo_visita possui mais de um valor, ou seja pode ser preenchido com 1, 1 e 2, 2 3 e 4, e assim por diante. Primeiro que isso vai contra as formas de normalização segundo da forma como esta modelado você não tem como extrair as informações do jeito que você quer por meio de um select com group by você teria que ter um programa ou uma procedure que antes de gerar o select quebrasse o conteudo do campo. Minha Sugestão é que ao inves de preencher o campo com 1 e 2 por exemplo você gere um registro para cada ocorrencia e utilize o select abaixo para recuperar a informação.

select codusuario, data_visita, tipo_visita, count(*)
from Relatorio_visitas
group by codusuario, data_visita, tipo_visita

espero ter ajudado.