none
Script SQL RRS feed

  • Pergunta

  • Olá,
    Boa Tarde!

    Estou com uns problemas no script abaixo, poderiam me auxiliar?

    Relatório:

    Prezada conforme solicitado pela ANS necessitamos de um relatório que informe o número de pacientes que readmitimos após alta no prazo de 0-29 dias com o mesmo CID de internação. Esse dado necessita estar separado por mês (todos os meses de 2016)<o:p></o:p>

    Fiz o Script abaixo, mais está dando alguns erros.

    set dateformat dmy

    DECLARE @DTINI DATETIME
    DECLARE @DTFIM DATETIME

    SET @DTINI = '01/01/2016'
    SET @DTFIM = '01/02/2016'

    SELECT 

        CONVENIO, 
    CID,
        ANO, 
        SUM(CONTAGEM) AS CONTAGEM, 
        SUM(JANEIRO) AS JANEIRO, 
        SUM(FEVEREIRO) AS FEVEREIRO,
        SUM(MARCO) AS MARCO, 
        SUM(ABRIL) AS ABRIL, 
        SUM(MAIO) AS MAIO, 
        SUM(JUNHO) AS JUNHO, 
        SUM(JULHO) AS JULHO, 
        SUM(AGOSTO) AS AGOSTO, 
        SUM(SETEMBRO) AS SETEMBRO,
        SUM(OUTUBRO) AS OUTUBRO, 
        SUM(NOVEMBRO) AS NOVEMBRO, 
        SUM(DEZEMBRO) AS DEZEMBRO 
    FROM 
    (

    SELECT

    CONV_DS CONVENIO,     
    COUNT(EVE_ID) AS CONTAGEM,
    CID_ID CID,

    CAST ((select YEAR(@DTINI)) as char(4)) ANO,   
    Case When month(EVE_DT) = 1  then count(PAC_ID) else 0 end  JANEIRO,
    Case When month(EVE_DT) = 2  then count(PAC_ID) else 0 end  FEVEREIRO,
    Case When month(EVE_DT) = 3  then count(PAC_ID) else 0 end  MARCO,
    Case When month(EVE_DT) = 4  then count(PAC_ID) else 0 end  ABRIL,
    Case When month(EVE_DT) = 5  then count(PAC_ID) else 0 end  MAIO,
    Case When month(EVE_DT) = 6  then count(PAC_ID) else 0 end  JUNHO,
    Case When month(EVE_DT) = 7  then count(PAC_ID) else 0 end  JULHO,
    Case When month(EVE_DT) = 8  then count(PAC_ID) else 0 end  AGOSTO,
    Case When month(EVE_DT) = 9  then count(PAC_ID) else 0 end  SETEMBRO,
    Case When month(EVE_DT) = 10 then count(PAC_ID) else 0 end  OUTUBRO,
    Case When month(EVE_DT) = 11 then count(PAC_ID) else 0 end  NOVEMBRO,
    Case When month(EVE_DT) = 12 then count(PAC_ID) else 0 end  DEZEMBRO

    FROM
    (SELECT DATEDIFF(DAY,DataUltimaAlta,DataInternacao)DiasDif,*
    FROM 
    (SELECT (select MAX(EVE_DT) FROM EVENTO_INTERNACAO E2 WHERE E1.PAC_ID = E2.PAC_ID
    AND 
    EIT_ID = 2 
    AND 
    E2.EVE_DT < E1.EVE_DT) DataUltimaAlta,
    E1.EVE_DT DataInternacao, 
    E1.PCONV_ID, 
    E1.PAC_ID,
    DIAG2.CID_ID,
    CONV.CONV_DS,     
    COUNT(E1.EVE_ID),
    E1.EVE_DT,
    E1.EVE_ID
    FROM 
    EVENTO_INTERNACAO E1
           JOIN PLANO_CONVENIO                   PCONV ON PCONV.PCONV_ID = E1.PCONV_ID   
           JOIN CONVENIO                         CONV  ON CONV.CONV_ID   = PCONV.CONV_ID
      JOIN DIAGNOSTICO                     DIAG2  ON DIAG2.EVE_ID   = E1.EVE_ID AND DIAG2.DIAG_ITEM = 1 
    WHERE 

    EIT_ID = 1
    AND 
    EVE_DT >= '01/01/2016'
    AND
    EVE_DT < '01/02/2016'
    GROUP BY PCONV.PCONV_DS, CONV.CONV_DS, month (E1.EVE_DT), DIAG2.CID_ID, PAC_ID, E1.EVE_DT, E1.PCONV_ID, E1.EVE_ID 
    )CurInt
    )DiasDif
    where DiasDif < 30)

     Não reconhece o cursor DiasDif e  o erro abaixo:

    Msg 102, Level 15, State 1, Line 78
    Sintaxe incorreta perto de ')'.

    Aguardo.

    Obrigado.

     
    sexta-feira, 21 de abril de 2017 18:53

Respostas

  • tente isso.

    ...
    FROM
    (SELECT DATEDIFF(DAY,DataUltimaAlta,DataInternacao) 
     as DiferencaDias ,*
    FROM 
    (SELECT (select MAX(EVE_DT) FROM EVENTO_INTERNACAO E2 WHERE E1.PAC_ID = E2.PAC_ID
    AND 
    EIT_ID = 2 
    AND 
    E2.EVE_DT < E1.EVE_DT) DataUltimaAlta,
    E1.EVE_DT DataInternacao, 
    E1.PCONV_ID, 
    E1.PAC_ID,
    DIAG2.CID_ID,
    CONV.CONV_DS,     
    COUNT(E1.EVE_ID),
    E1.EVE_DT,
    E1.EVE_ID
    FROM 
    EVENTO_INTERNACAO E1
           JOIN PLANO_CONVENIO                   PCONV ON PCONV.PCONV_ID = E1.PCONV_ID   
           JOIN CONVENIO                         CONV  ON CONV.CONV_ID   = PCONV.CONV_ID
      JOIN DIAGNOSTICO                     DIAG2  ON DIAG2.EVE_ID   = E1.EVE_ID AND DIAG2.DIAG_ITEM = 1 
    WHERE 
    
    EIT_ID = 1
    AND 
    EVE_DT >= '01/01/2016'
    AND
    EVE_DT < '01/02/2016'
    GROUP BY PCONV.PCONV_DS, CONV.CONV_DS, month (E1.EVE_DT), DIAG2.CID_ID, PAC_ID, E1.EVE_DT, E1.PCONV_ID, E1.EVE_ID 
    )CurInt
    )DiasDif
    where DiasDif.DiferencaDias < 30)
    Nao consigo rodar seu sql, mas me parece que esse é o problema

    sexta-feira, 21 de abril de 2017 20:15

Todas as Respostas

  • tente isso.

    ...
    FROM
    (SELECT DATEDIFF(DAY,DataUltimaAlta,DataInternacao) 
     as DiferencaDias ,*
    FROM 
    (SELECT (select MAX(EVE_DT) FROM EVENTO_INTERNACAO E2 WHERE E1.PAC_ID = E2.PAC_ID
    AND 
    EIT_ID = 2 
    AND 
    E2.EVE_DT < E1.EVE_DT) DataUltimaAlta,
    E1.EVE_DT DataInternacao, 
    E1.PCONV_ID, 
    E1.PAC_ID,
    DIAG2.CID_ID,
    CONV.CONV_DS,     
    COUNT(E1.EVE_ID),
    E1.EVE_DT,
    E1.EVE_ID
    FROM 
    EVENTO_INTERNACAO E1
           JOIN PLANO_CONVENIO                   PCONV ON PCONV.PCONV_ID = E1.PCONV_ID   
           JOIN CONVENIO                         CONV  ON CONV.CONV_ID   = PCONV.CONV_ID
      JOIN DIAGNOSTICO                     DIAG2  ON DIAG2.EVE_ID   = E1.EVE_ID AND DIAG2.DIAG_ITEM = 1 
    WHERE 
    
    EIT_ID = 1
    AND 
    EVE_DT >= '01/01/2016'
    AND
    EVE_DT < '01/02/2016'
    GROUP BY PCONV.PCONV_DS, CONV.CONV_DS, month (E1.EVE_DT), DIAG2.CID_ID, PAC_ID, E1.EVE_DT, E1.PCONV_ID, E1.EVE_ID 
    )CurInt
    )DiasDif
    where DiasDif.DiferencaDias < 30)
    Nao consigo rodar seu sql, mas me parece que esse é o problema

    sexta-feira, 21 de abril de 2017 20:15
  • Deleted
    sexta-feira, 21 de abril de 2017 21:36
  • Conseguiu testar?
    segunda-feira, 24 de abril de 2017 21:34
  • Renan, algumas dúvidas:

    1. na internação é gravada uma linha na tabela EVENTO_INTERNACAO e na respectiva alta é gravada outra linha? 
    2. se a resposta da pergunta 1 for sim, como detectar qual é a linha da internação e qual é a linha de alta?  EIT_ID?
    3. existe alguma coluna nessa tabela que relacione diretamente a internação com a respectiva alta? EVE_ID?
    4. o CID no momento da alta pode ser diferente do CID no momento da internação?

    e-mail       José Diz     Belo Horizonte, MG - Brasil



    José,

    Ótimas perguntas, pois se realmente existir uma tabela que guarde os dados da nova internação ficará mais fácil fazer o relacionamento dos dados. Eu acredito que o código do CID poderá mudar em caso de uma nova internação.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 25 de abril de 2017 12:19