Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Resposta Atividade + Dúvida

Não sei se foi essa a idéia da atividade, mas fiz um join entre as tabelas [ITENS NOTAS FISCAIS] e [NOTAS FISCAIS] para pegar a qauntidade de notas/dia e declarei a varíavel @DATA_PESQUISA para usar como dado de gatilho.

DECLARE @DATA_PESQUISA DATE
SET @DATA_PESQUISA = '2020-11-06'
DECLARE @QUANTIDADE_NOTA_DIA INT
SET @QUANTIDADE_NOTA_DIA = (SELECT SUM(INF.QUANTIDADE) AS QUANTIDADE_NOTA_DIA FROM [dbo].[ITENS NOTAS FISCAIS] INF
INNER JOIN [dbo].[NOTAS FISCAIS] NF
ON INF.NUMERO = NF.NUMERO 
WHERE NF.DATA = @DATA_PESQUISA
GROUP BY NF.DATA)
    PRINT @QUANTIDADE_NOTA_DIA
IF @QUANTIDADE_NOTA_DIA >= 70
    PRINT 'Muita Nota'
ELSE 
    PRINT 'Pouca Nota'

O problema nesse código é que se for inserido uma data que não tenha na tabela [NOTAS FISCAIS] sempre será retornado "Pouca Nota". Como eu poderia resolver esse problema?

1 resposta
solução!

Olá Pablo, tudo bem?

Na atividade solicita que você baseado em uma data, conte o número de notas fiscais, então neste caso você não precisa realizar o JOIN entre as duas tabelas e ao invés de utilizar o SUM, você utiliza o COUNT para realizar a contagem destas notas :

DECLARE @DATA_PESQUISA DATE
DECLARE @QUANTIDADE_NOTA_DIA INT
 SET @DATA_PESQUISA = '20170102'

SET @QUANTIDADE_NOTA_DIA = (SELECT COUNT(*) FROM [NOTAS FISCAIS]
WHERE DATA = @DATA_PESQUISA)

Se para a data informada a quantidade de notas for MAIOR que 70, a mensagem "Muita nota" deve ser exibida, se não, exiba a mensagem "Pouca nota":

IF @QUANTIDADE_NOTA_DIA > 70

    PRINT 'Muita Nota'
ELSE 
    PRINT 'Pouca Nota'

PRINT @QUANTIDADE_NOTA_DIA

A query completa fica desta forma:

DECLARE @DATA_PESQUISA DATE
DECLARE @QUANTIDADE_NOTA_DIA INT
SET @DATA_PESQUISA = '20170102'

SET @QUANTIDADE_NOTA_DIA = (SELECT COUNT(*) FROM [NOTAS FISCAIS]
WHERE DATA = @DATA_PESQUISA)

IF @QUANTIDADE_NOTA_DIA > 70
    PRINT 'Muita Nota'
ELSE 
    PRINT 'Pouca Nota'

PRINT @QUANTIDADE_NOTA_DIA

Você pode resolver o problema de datas que não existam no banco de dados, inserindo um outro IF para que seja verificado se a quantidade de notas retornadas foi igual a 0, assim você poderá exibir uma outra mensagem na tela:

IF  @QUANTIDADE_NOTA_DIA = 0
    PRINT 'Data não existe na tabela de Notas Fiscais'
ELSE 

Caso esse numero seja diferente de 0, ele irá executar o segundo IF, para verificar se a quantidade é maior ou menor que 70:

IF  @QUANTIDADE_NOTA_DIA = 0
    PRINT 'Data não existe na tabela de Notas Fiscais'
ELSE 
IF @QUANTIDADE_NOTA_DIA > 70
    PRINT 'Muita Nota'
ELSE 
    PRINT 'Pouca Nota'

A query completa fica desta forma:

DECLARE @DATA_PESQUISA DATE
SET @DATA_PESQUISA = '20210322'
DECLARE @QUANTIDADE_NOTA_DIA INT


SET @QUANTIDADE_NOTA_DIA = (SELECT COUNT(*) FROM [NOTAS FISCAIS]
WHERE DATA = @DATA_PESQUISA)

IF  @QUANTIDADE_NOTA_DIA = 0
    PRINT 'Data não existe na tabela de Notas Fiscais'
ELSE 
IF @QUANTIDADE_NOTA_DIA > 70
    PRINT 'Muita Nota'
ELSE 
    PRINT 'Pouca Nota'
PRINT @QUANTIDADE_NOTA_DIA

Espero ter ajudado e bons estudos!