Ir para o conteúdo
jafm

[Resolvido] ajuda com count

Mensagens Recomendadas

jafm

Boas,

Com a query conto os movimentos do cliente, comparando com a dada to PC, até aqui tudo bem, agora queria que quando não existisse nenhum movimento aparece o resultado com 0 e não vazio, é possível fazer isso através da query?

select Count(Id)as total , id from Cliente where Cast(data as date) = Cast (GETDATE() as date) group by id

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Tu tens os movimentos de clientes numa tabela chamada "Cliente"?

Onde é que tens os dados de clientes? O nome, a morada, o telefone, ...???

Faz um query que liga a tabela de clientes (con nome, morada, ...) e a tabela de movimentos (com data, valor, ...) com um OUTER JOIN. Assim ja te aparecem todos os clientes, quer tenham movmentos ou nao.

Se nao tens tabelas diferenciadas para clientes e movimentos, altera a base de dados.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jafm

Já consegui controlar esse problema, obrigado pela ajuda.

Entretanto surgiu outro que é o seguinte,

Quero saber quais os clientes que fazem anos neste mês. Contrui esta query, só que o formato das minhas datas de nascimento são 18-Jan-1965, 18-Nov-1984, só que com esta query dá me erro de conversão, o resultado esperado seria por exemplo 2008-11-17 14:48:00

select * from Cliente where DAY(Data) = DAY((GETDATE()+15)) and MONTH(Data) = MONTH(GETDATE())

Não existe possibilidade de conseguir contornar a query para que eu possa verificar os aniversário através do seguinte formato 18-Jan-1965

Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Existir existe (praticamente tudo é possível em informática), mas não é aconselhavel. A tua query nesses moldes fica lenta e pouco funcional ... e cada vez mais e mais lenta à medida que a base de dados cresce.

A boa solução passa por redefnires a base de dados tendo as colunas com tipo de dados apropriados: datetime (ou smalldatetime) para datas; varchar para nomes; ...


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rechousa

Olá,

Quero saber quais os clientes que fazem anos neste mês. Contrui esta query, só que o formato das minhas datas de nascimento são 18-Jan-1965, 18-Nov-1984, só que com esta query dá me erro de conversão, o resultado esperado seria por exemplo 2008-11-17 14:48:00

select * from Cliente where DAY(Data) = DAY((GETDATE()+15)) and MONTH(Data) = MONTH(GETDATE())

Não existe possibilidade de conseguir contornar a query para que eu possa verificar os aniversário através do seguinte formato 18-Jan-1965

Quando dizes que estás a usar "18-Jan-1965, 18-Nov-1984" significa que o quê? Que estão em texto?

É que podes ter isto em SQL Server (tem é de estar em Inglês):

DECLARE @Data DATE = '18-Apr-1965';
PRINT @Data;
-- Resultado: 1965-04-18


-- ou em Português

SET LANGUAGE Portuguese;
DECLARE @DataPT DATE = '18-Apr-1965';
PRINT @DataPT;
-- Resultado: 1965-04-18

A partir da data consegues obter os utilizadores que fazem anos nesse mês fazendo:

SET LANGUAGE Portuguese;
DECLARE @Data DATE = GETDATE();

SELECT * FROM Cliente WHERE YEAR(Data) = YEAR(@Data) AND MONTH(Data) = MONTH(@Data);


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jafm

Percebi a tua ideia Rechousa, pena é o formato do GETDATE() não estar por exemplo 18-Abr-1965

SET LANGUAGE Portuguese;
DECLARE @DataPT DATE = GETDATE()
PRINT @DataPT;
-- Resultado 2013-01-04

Quando o resultado deveria ser 2013-Jan-04

Não existe a possibilidade de modificar o tipo de data do GETDATE()?

Editado por jafm

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jafm

Bem ja consegui resolver mais ou menos o problema

coloquei da seguinte forma,

SET LANGUAGE Portuguese;
DECLARE @DATA varchar(11) = REPLACE(CONVERT(VARCHAR(11), GETDATE(), 106), ' ', '-')
print @Data
--Resultado 04-jan-2013
SELECT top 111 * FROM Cliente WHERE MONTH(Data) = MONTH(@data)

Só que chega a um certo momento apresenta que volta a dar de novo o erro

Conversion failed when converting date and/or time from character string.

Editado por apocsantos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.