1
resposta

retornando vários selects

Pessoal, bom dia.

Fiz essa query abaixo para resolução do exercício, mas está retornando em selects diferentes e não no mesmo conjunto.

DECLARE @data_inicial AS DATE, @data_final AS DATE

SET @data_inicial = '20170101' SET @data_final = DATEADD(DAY, 1, @data_inicial)

WHILE @data_inicial < '20170110' BEGIN SELECT COUNT(*) AS 'notas', [DATA] FROM dbo.[NOTAS FISCAIS] WHERE [DATA] = @data_inicial GROUP BY [DATA] SET @data_inicial = DATEADD(DAY, 1, @data_inicial) END

1 resposta

Olá Heitor, tudo bem?

O seu resultado é retornado em vários selects, pelo fato de você ter utilizado o loop WHILE, e retornar o valores direto no resultado. Então, enquanto o resultado for verdadeiro um select será realizado na tabela e o resultado será retornado.

A sua query desta forma está funcionando direitinho Heitor, Parabéns :).

Mas, caso você queira retornar o valor de uma única vez, você pode fazer da mesmo forma apresentada na opnião do instrutor, printar o resultado, concatenando com a data inicial:

DECLARE @DATAINICIAL DATE
DECLARE @DATAFINAL DATE
DECLARE @NUMNOTAS INT

SET @DATAINICIAL = '20170101'
SET @DATAFINAL = '20170110'

WHILE @DATAINICIAL <= @DATAFINAL
BEGIN
    SELECT @NUMNOTAS = COUNT(*) FROM [NOTAS FISCAIS] 
        WHERE DATA = @DATAINICIAL
    PRINT CONVERT(VARCHAR(10), @DATAINICIAL) + ' --> ' 
        + CONVERT(VARCHAR(10), @NUMNOTAS)
    SELECT @DATAINICIAL = DATEADD(DAY, 1, @DATAINICIAL)
END

Continue assim, qualquer dúvida é só falar e bons estudos!