Jump to content
jafm

[Resolvido] ajuda com count

Recommended Posts

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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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

Edited by apocsantos
geshi

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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()?

Edited by jafm

Share this post


Link to post
Share on other 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.

Edited by apocsantos

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.