none
CASE RRS feed

  • Pergunta

  • Olá pessoal estou tentando fazer um CASE no VB.NET igual no SQL mais está dando um erro de sintaxe.

    Segue o meu codigo:

     

    SELECT
    NR_IDENT_USUARIO AS DI,
    PB_CARGA AS [Peso Bruto],
    PL_CARGA AS [Peso Líquido],
    CD_URF_ENTR_CARGA AS [URF Entrada], CD_VIA_TRANSP_CARG AS [Via TRansporte],
    'Pais de Procedência' = CASE WHEN CD_PAIS_PROC_CARGA  = '399' THEN 'JAPÃO'
    ELSE 'Not Type'
    END,

    MID(NR_IMPORTADOR,1,2)+'.'+MID(NR_IMPORTADOR,3,3)+'.'+MID(NR_IMPORTADOR,6,3)+'/'+MID(NR_IMPORTADOR,9,4)+'-'+MID(NR_IMPORTADOR,13,2) AS Importador
    FROM DECLARAÇÃO_IMPORTAÇÃO

    quarta-feira, 28 de março de 2007 12:21

Respostas

  • Hmm. Na verdade é o Access. O Access não tem CASE.

     

    Uma solução é usar a função Iif() no lugar:

     

    Iif(CD_PAIS_PROC_CARGA = '399', 'Japão', 'Not Type')

     

    A função é:

     

    Iif(<Expressão>, <Retorno se verdadeiro>, <Retorno se falso>)

    quarta-feira, 28 de março de 2007 14:41

Todas as Respostas

  • bom dia Julio César!

     

    cara, olhando seu SQL por cima ja vi um erro... essa função MID não existe no SQL, vc deve utilizar SUBSTRING(campo,posicao_inicial,quantidade)

     

    e o nome de sua tabela tem mesmo acento e cedilha?

     

    abraço!

    quarta-feira, 28 de março de 2007 13:14
  • Eu acredito que seu CASE deveria ser assim:

     

    CASE CD_PAIS_PROC_CARGA  WHEN '399' THEN 'Japão' ELSE 'Not Type'

     

    se o campo CD_PAIS_PROC_CARGA   armazenar um número tire as aspas simples de '399'.

     

    Preste atenção também nas funções. MID() é do Acces e não existe no SQL Server. Você não diz qual banco está usando.

     

    Sempre informe o banco e a mensagem de erro.

    quarta-feira, 28 de março de 2007 13:22
  • Vitor esse select é para um result no meu Crystal Report, estou usando uma conexão com um BD access.

    Eu sei que a sintaxe MID não e do SQL.

    Se eu tirar O CASE meu select funcinar normal, o meu problema está no CASE para ao inves de sair no relatorio "399" sair o nome JAPAO.

     

    quarta-feira, 28 de março de 2007 13:31
  • Angus meu problema está somente no CASE, se eu tira a sintaxe CASE meu select funciona normal.

    Esse select e para um crystal Report com conexao a um BD Access.

     

    Obrigado,

    quarta-feira, 28 de março de 2007 13:33
  • Você já tentou colocar o CASE como eu disse acima? Continua dando erro?
    quarta-feira, 28 de março de 2007 14:10
  • Angus Continua dando erro de Sintaxe.
    quarta-feira, 28 de março de 2007 14:16
  • Bom dia Julio tenta assim

     

     

    SELECT
    NR_IDENT_USUARIO AS DI,
    PB_CARGA AS [Peso Bruto],
    PL_CARGA AS [Peso Líquido],
    CD_URF_ENTR_CARGA AS [URF Entrada], CD_VIA_TRANSP_CARG AS [Via TRansporte],
    CASE WHEN CD_PAIS_PROC_CARGA  = '399' THEN 'JAPÃO'
    ELSE 'Not Type' END as 'Pais de Procedência' ,

    Substring(NR_IMPORTADOR,1,2)+'.'+SubString(NR_IMPORTADOR,3,3)+'.'+SubString(NR_IMPORTADOR,6,3)+'/'+SubString(NR_IMPORTADOR,9,4)+'-'+SubString(NR_IMPORTADOR,13,2) AS Importador
    FROM [DECLARAÇÃO_IMPORTAÇÃO]

     

     

     

    Espero ter ajudado

    quarta-feira, 28 de março de 2007 14:24
  • Continua dando erro de Sintaxe.

     

    erro:

    Query Engine Error: 'DAO Error Code: 0xc03

    Source: DAO.Database

    Description: Erro de Sintaxe (Operador Faltando) na expressão de Consulta 'CASE WHEN CD_PAIS_PROC_CARGA = '399' THEN 'JAPÃO' ELSE 'Not Type' END

    quarta-feira, 28 de março de 2007 14:35
  • Hmm. Na verdade é o Access. O Access não tem CASE.

     

    Uma solução é usar a função Iif() no lugar:

     

    Iif(CD_PAIS_PROC_CARGA = '399', 'Japão', 'Not Type')

     

    A função é:

     

    Iif(<Expressão>, <Retorno se verdadeiro>, <Retorno se falso>)

    quarta-feira, 28 de março de 2007 14:41