Ir para conteúdo
Fórum Script Brasil
  • 0

Usando cursor e loop em consulta SQL


Rodrigo Hoffmann

Pergunta

Olá

Estou com um problema

Iniciei a pouco tempo sql e estou com duvidas para criar um cursor

A minha consulta que fiz me retorna por exemplo 50 codigos, cada um com seu numero eu gostaria de preencher com algum comando em sql os codigos nulo

Exemplo

Minha consulta retornou

1 jose

2 joao

4 maria

5 juca

6 pedro

9 marta

10 fulano

etc

e gostaria que se não possui o codigo ele prenchesse então ficaria

1 jose

2 joao

3

4 maria

5 juca

6 pedro

7

8

9 marta

10 fulano

etc

Esperam que entendam, preciso de ajuda

Obrigado

Editado por Jonathan Queiroz
Remover caixa alta do título conforme regra 3.7 (Jonathan)
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Rodrigo,

Neste caso, não há necessidade de se criar um Cursor. Um While resolve o problema. Segue abaixo um exemplo:

-- criação de tabela temporária
CREATE TABLE #Nomes (Valor INT, Nome VARCHAR(50))

-- Inserção dos dados
INSERT INTO #Nomes VALUES (1, 'jose')
INSERT INTO #Nomes VALUES (2, 'joao')
INSERT INTO #Nomes VALUES (4, 'maria')
INSERT INTO #Nomes VALUES (5, 'juca')
INSERT INTO #Nomes VALUES (6, 'pedro')
INSERT INTO #Nomes VALUES (9, 'marta')
INSERT INTO #Nomes VALUES (10, 'fulano')

-- Selecionar todo o script, até o final. Executar.
DECLARE @Contador INT

SET @Contador = 1

WHILE @contador < (SELECT MAX (valor) FROM #Nomes)
BEGIN
    IF (SELECT top 1 1 FROM #Nomes WHERE valor=@Contador) IS NULL
      INSERT INTO #Nomes VALUES (@Contador, '')
    SET @Contador = @Contador + 1 
END


-- Conferência
SELECT * FROM #Nomes

Link para o comentário
Compartilhar em outros sites

  • 0

Olá me ajude nunca trabalhei com esse metodo ainda

minha consulta é essa, onde colocaria isso

CREATE PROCEDURE DBO.[Formulario LFC_GERACAO_ARQUIVO_RECEITA_FEDERAL_431]

(

@PCodEmpresa INT,

@PDataI DATETIME,

@PDataF DATETIME

)

AS

SELECT

BAS_DOCUMENTO.NotaFiscalEntSai,

BAS_DOCUMENTO.ModeloNotaCod,

BAS_DOCUMENTO.NotaFiscalSerie,

BAS_DOCUMENTO.NotaFiscalSubSerie,

BAS_DOCUMENTO.NotaFiscalNumero,

(SELECT REPLACE(CONVERT (VARCHAR(10), BAS_DOCUMENTO.NotaFiscalDataEmissao, 103), '/', '') AS numeric) AS NotaFiscalDataEmissao,

BAS_DOCUMENTO.NotaFiscalEmpCodigo,

(SELECT REPLACE(CONVERT (VARCHAR(10), BAS_DOCUMENTO.NotaFiscalDataLancamento, 103), '/', '') AS numeric) AS NotaFiscalDataLancamento,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorProdutos) AS TotalMercadoria,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorDesconto) AS TotalDesconto,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorFrete) AS TotalFrete,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorSeguro) AS TotalSeguro,

(SELECT

SUM(OUTRAS.NFRLOutrasIPI)

FROM

BAS_DOCUMENTO_REG_LAN AS OUTRAS

INNER JOIN BAS_DOCUMENTO ON OUTRAS.NotaFiscalContador = BAS_DOCUMENTO.NotaFiscalContador

INNER JOIN BAS_DOCUMENTO_HISTORICO ON OUTRAS.HistoricoCodigo = BAS_DOCUMENTO_HISTORICO.HistoricoCodigo

INNER JOIN BAS_DOCUMENTO_MODELO ON BAS_DOCUMENTO.ModeloNotaCod = BAS_DOCUMENTO_MODELO.ModeloNotaCod

INNER JOIN LFC_DOCUMENTO_OPERACAO ON BAS_DOCUMENTO_HISTORICO.CodigoNaturezaOperacao = LFC_DOCUMENTO_OPERACAO.CodigoNaturezaOperacao

WHERE

(OUTRAS.HistoricoCodigo in ('193301','193302','193307','135201','193303','135203','135204','135205','135206','135207','135208','135209','135210','130201','235202','235201')) AND

(OUTRAS.NotaFiscalContador = BAS_DOCUMENTO_REG_LAN.NotaFiscalContador)) AS TotalDespesa,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorIPI) AS TotalIPI,

'0' AS TotalICMS,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorContabil) AS TotalContabil,

'00000000000000' AS SubsTributario,

'000000000000000' AS ViaTransporte,

(SELECT TOP 1

BAS_EMPRESA.EmpCódigo

FROM

BAS_EMPRESA

WHERE

BAS_EMPRESA.EmpFantasia = BAS_DOCUMENTO.EmpFantasiaTransportador) AS CodigoTransportador,

NotaFiscalQuantidade,

NotaFiscalEspecie,

NotaFiscalPesoBruto,

NotaFiscalPesoLiquido,

(CASE WHEN ISNULL(BAS_DOCUMENTO.NotaFiscalFrete,0) = 1 THEN 'FOB' ELSE 'CIF' END) AS NotaFiscalFrete,

NotaFiscalPlaca,

'N' AS Cancelado,

'2' AS Fatura,

(LTRIM(RTRIM(ISNULL(BAS_DOCUMENTO.NotaFiscalOBS,'')))+ISNULL(NotaFiscalDadosAdicionais,'')) AS Observacao

FROM

BAS_DOCUMENTO_REG_LAN

INNER JOIN BAS_DOCUMENTO ON BAS_DOCUMENTO_REG_LAN.NotaFiscalContador = BAS_DOCUMENTO.NotaFiscalContador

INNER JOIN BAS_DOCUMENTO_HISTORICO ON BAS_DOCUMENTO_REG_LAN.HistoricoCodigo = BAS_DOCUMENTO_HISTORICO.HistoricoCodigo

INNER JOIN BAS_DOCUMENTO_MODELO ON BAS_DOCUMENTO.ModeloNotaCod = BAS_DOCUMENTO_MODELO.ModeloNotaCod

INNER JOIN LFC_DOCUMENTO_OPERACAO ON BAS_DOCUMENTO_HISTORICO.CodigoNaturezaOperacao = LFC_DOCUMENTO_OPERACAO.CodigoNaturezaOperacao

WHERE

(BAS_DOCUMENTO_MODELO.ModeloNotaSintegra = 1) AND

(BAS_DOCUMENTO.CodEmpresa = @PCodEmpresa) AND

(LFC_DOCUMENTO_OPERACAO.NaturezaOperacaoTransICMS<>1) AND

(BAS_DOCUMENTO.NotaFiscalDataLancamento BETWEEN CONVERT(DATETIME,@PDataI, 102) and CONVERT(DATETIME,@PDataF, 102)) AND

(BAS_DOCUMENTO.NotaFiscalEntSai in ('E')) AND

(BAS_DOCUMENTO.NotaFiscalEmpTipo in ('J')) AND

(BAS_DOCUMENTO.ModeloNotaCod IN ('1','55','6','22','8'))

GROUP BY

BAS_DOCUMENTO.NotaFiscalEntSai,

BAS_DOCUMENTO.ModeloNotaCod,

BAS_DOCUMENTO.NotaFiscalSerie,

BAS_DOCUMENTO.NotaFiscalSubSerie,

BAS_DOCUMENTO.NotaFiscalNumero,

BAS_DOCUMENTO.NotaFiscalDataEmissao,

BAS_DOCUMENTO_REG_LAN.NotaFiscalContador,

BAS_DOCUMENTO.NotaFiscalEmpCodigo,

BAS_DOCUMENTO.NotaFiscalDataLancamento,

BAS_DOCUMENTO.NotaFiscalOBS,

BAS_DOCUMENTO.NotaFiscalDadosAdicionais,

BAS_DOCUMENTO.EmpFantasiaTransportador,

BAS_DOCUMENTO.NotaFiscalEspecie,

BAS_DOCUMENTO.NotaFiscalPesoBruto,

BAS_DOCUMENTO.NotaFiscalPesoLiquido,

BAS_DOCUMENTO.NotaFiscalFrete,

BAS_DOCUMENTO.NotaFiscalPlaca,

BAS_DOCUMENTO.NotaFiscalQuantidade

UNION ALL

SELECT

BAS_DOCUMENTO.NotaFiscalEntSai,

BAS_DOCUMENTO.ModeloNotaCod,

BAS_DOCUMENTO.NotaFiscalSerie,

BAS_DOCUMENTO.NotaFiscalSubSerie,

BAS_DOCUMENTO.NotaFiscalNumero,

(SELECT REPLACE(CONVERT (VARCHAR(10), BAS_DOCUMENTO.NotaFiscalDataEmissao, 103), '/', '') AS numeric) AS NotaFiscalDataEmissao,

BAS_DOCUMENTO.NotaFiscalEmpCodigo,

(SELECT REPLACE(CONVERT (VARCHAR(10), BAS_DOCUMENTO.NotaFiscalDataLancamento, 103), '/', '') AS numeric) AS NotaFiscalDataLancamento,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorProdutos) AS TotalMercadoria,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorDesconto) AS TotalDesconto,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorFrete) AS TotalFrete,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorSeguro) AS TotalSeguro,

(SELECT

SUM(OUTRAS.NFRLOutrasIPI)

FROM

BAS_DOCUMENTO_REG_LAN AS OUTRAS

INNER JOIN BAS_DOCUMENTO ON OUTRAS.NotaFiscalContador = BAS_DOCUMENTO.NotaFiscalContador

INNER JOIN BAS_DOCUMENTO_HISTORICO ON OUTRAS.HistoricoCodigo = BAS_DOCUMENTO_HISTORICO.HistoricoCodigo

INNER JOIN BAS_DOCUMENTO_MODELO ON BAS_DOCUMENTO.ModeloNotaCod = BAS_DOCUMENTO_MODELO.ModeloNotaCod

INNER JOIN LFC_DOCUMENTO_OPERACAO ON BAS_DOCUMENTO_HISTORICO.CodigoNaturezaOperacao = LFC_DOCUMENTO_OPERACAO.CodigoNaturezaOperacao

WHERE

(OUTRAS.HistoricoCodigo in ('193301','193302','193307','135201','193303','135203','135204','135205','135206','135207','135208','135209','135210','130201','235202','235201')) AND

(OUTRAS.NotaFiscalContador = BAS_DOCUMENTO_REG_LAN.NotaFiscalContador)) AS TotalDespesa,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorIPI) AS TotalIPI,

'0' AS TotalICMS,

SUM(BAS_DOCUMENTO_REG_LAN.NFRLValorContabil) AS TotalContabil,

'00000000000000' AS SubsTributario,

'000000000000000' AS ViaTransporte,

(SELECT TOP 1

BAS_EMPRESA.EmpCódigo

FROM

BAS_EMPRESA

WHERE

BAS_EMPRESA.EmpFantasia = BAS_DOCUMENTO.EmpFantasiaTransportador) AS CodigoTransportador,

NotaFiscalQuantidade,

NotaFiscalEspecie,

NotaFiscalPesoBruto,

NotaFiscalPesoLiquido,

(CASE WHEN ISNULL(BAS_DOCUMENTO.NotaFiscalFrete,0) = 1 THEN 'FOB' ELSE 'CIF' END) AS NotaFiscalFrete,

NotaFiscalPlaca,

'N' AS Cancelado,

'2' AS Fatura,

(LTRIM(RTRIM(ISNULL(BAS_DOCUMENTO.NotaFiscalOBS,'')))+ISNULL(NotaFiscalDadosAdicionais,'')) AS Observacao

FROM

BAS_DOCUMENTO_REG_LAN

INNER JOIN BAS_DOCUMENTO ON BAS_DOCUMENTO_REG_LAN.NotaFiscalContador = BAS_DOCUMENTO.NotaFiscalContador

INNER JOIN BAS_DOCUMENTO_HISTORICO ON BAS_DOCUMENTO_REG_LAN.HistoricoCodigo = BAS_DOCUMENTO_HISTORICO.HistoricoCodigo

INNER JOIN BAS_DOCUMENTO_MODELO ON BAS_DOCUMENTO.ModeloNotaCod = BAS_DOCUMENTO_MODELO.ModeloNotaCod

INNER JOIN LFC_DOCUMENTO_OPERACAO ON BAS_DOCUMENTO_HISTORICO.CodigoNaturezaOperacao = LFC_DOCUMENTO_OPERACAO.CodigoNaturezaOperacao

WHERE

(BAS_DOCUMENTO_MODELO.ModeloNotaSintegra = 1) AND

(BAS_DOCUMENTO.CodEmpresa = @PCodEmpresa) AND

(LFC_DOCUMENTO_OPERACAO.NaturezaOperacaoTransICMS<>1) AND

(BAS_DOCUMENTO.NotaFiscalDataLancamento BETWEEN CONVERT(DATETIME,@PDataI, 102) and CONVERT(DATETIME,@PDataF, 102)) AND

(BAS_DOCUMENTO.NotaFiscalEmpTipo in ('J')) AND

(BAS_DOCUMENTO.NotaFiscalEntSai in ('S'))

GROUP BY

BAS_DOCUMENTO.NotaFiscalEntSai,

BAS_DOCUMENTO.ModeloNotaCod,

BAS_DOCUMENTO.NotaFiscalSerie,

BAS_DOCUMENTO.NotaFiscalSubSerie,

BAS_DOCUMENTO.NotaFiscalNumero,

BAS_DOCUMENTO.NotaFiscalDataEmissao,

BAS_DOCUMENTO.NotaFiscalEmpCodigo,

BAS_DOCUMENTO.NotaFiscalDataLancamento,

BAS_DOCUMENTO_REG_LAN.NotaFiscalContador,

BAS_DOCUMENTO.NotaFiscalOBS,

BAS_DOCUMENTO.NotaFiscalDadosAdicionais,

BAS_DOCUMENTO.EmpFantasiaTransportador,

BAS_DOCUMENTO.NotaFiscalEspecie,

BAS_DOCUMENTO.NotaFiscalPesoBruto,

BAS_DOCUMENTO.NotaFiscalPesoLiquido,

BAS_DOCUMENTO.NotaFiscalFrete,

BAS_DOCUMENTO.NotaFiscalPlaca,

BAS_DOCUMENTO.NotaFiscalQuantidade

ORDER BY

5,

6

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...