Jump to content
GuiPetenuci

Query retorna o resultado justo, Mas na View nao

Recommended Posts

Boa tarde,

Estou com um problema e estou ficando louco, ja li praticamente todos as respostas de View de SQL Server no Stack Overflow e a maioria da documentacao da MSFT

 

Tenho uma view que faz algumas queries malucas que o cliente precisa, mas ela nao retorna o resultado justo, e se eu pegar o codigo e fazer uma query simples com o codigo, o resultado è ok.

 

Codigo da View

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


/****** Object:  View [QEHS].[V_FactMonitorings25261gui]    Script Date: 11/07/2019 16:24:53 ******/

CREATE view 
    [QEHS].[V_FactMonitorings25261gui]
as 

    with
    Plants as 
    (
        select distinct 
            [plant-id] 
        from 
            [QEHS].[Fact-Monitorings-H&S]            
    ) , 
    MIDs as 
    (
        select mid 
        from 
        (
            values
                ( 'MON.02.25 Total number of LTA free days (calendar days)')
                ,( 'MON.02.26 Total number of TRI free days (calendar days)') 
        ) as x(mid) 
    ), 
    PlantList 
    AS
    (
        select 
            a.date, 
            b.[plant-id], 
            c.mid
        from 
            QEHS.Calendar_Gen A 
            cross join 
            plants b    
            cross join mids c
        where 
            year(a.date) >= 2011
    ), 
    help1 as 
    (
        SELECT 
            p.date, 
            p.[plant-id],
            p.mid, 
            t.value,
            (
            case 
                when (year(p.date) = year(getdate()) and month(p.date) = month(getdate())) then 
                    day(getdate()) 
                else 
                    iif(t.value is not null, 0, day(eomonth(p.date)))            
                end 
            
            ) Days, 
            cast(isnull(cast(t.value as bit),0) as integer) reset 
        FROM 
            PLANTLIST p 
            left join 
            [QEHS].[Fact-Monitorings-H&S] T
            on
            (
                 p.date = t.date and 
                 p.[plant-id] = t.[plant-id] and 
                 p.mid = t.[monitoring-id] 
            )             
    ), 
    help2 as 
    (
        select 
            date, 
            [plant-id], 
            mid, 
            value, 
            days, 
            reset,
            formatmessage('%s%s%d', [plant-id], mid,sum(reset) over 
                ( 
                    partition by  [plant-id], mid 
                    order by  date, [plant-id], mid
                )
            ) grp
        from
            help1 
        where 
            year(date) >= (select year(min(date)) from [QEHS].[Fact-Monitorings-H&S])        
    ),
    help3 as 
    (
        select 
            date, 
            [plant-id], 
            mid, 
            value, 
            days, 
            first_value(value) over (partition by grp order by date, [plant-id], mid) fullvalue
        from 
            help2 
    ) 
    -- 
    select 
        date, 
        [plant-id], 
        mid, 
        isnull(a.Value, 
            fullvalue +sum(days) over 
            (
                 partition by [plant-id], mid, fullvalue 
                 order by  mid, date, [plant-id]
                 rows between unbounded preceding and current row
            ) 
        ) total
    from 
        help3 a
        
GO

a view retorna assim:

image.png.d268b4e95c7d50105620f3c03ecbb697.png

 

Agora se eu pegar e fazer a query "na mao", retorna assim, que è o justo:

image.png.1a0178f8b0871d85c6a5cd9c5a9d2911.png

 

Agora, porque na view retorna um e a query retorna outro? o.o

Share this post


Link to post
Share on other sites

Pode ser algo no momento da execução, imaginando o cenário com sua CTE.

São todas tabelas fisicas?

Tente dar um um count ou fazer o select por fora para um debug mais preciso

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By peterstefan
      Olá, estou com uma query aqui e preciso pegar de 2 campos diferentes os dados diferente de 0,  mais quanto tento no AND ele somente traz um resultado, o OR ele traz um dos campos com o valor 0, teria alguma forma de pegar os dados diferente de 0 dos dois campus?
      preciso pegar o idOrganizador diferente de 0 e o idPiloto diferente de 0 
       
      SELECT * FROM boletos WHERE proc = 0 AND idOrganizador !='0' AND idPiloto ='0';  
    • By mamotinho
      oi pessoal estou com um problema , não estou conseguindo passar todos os valores o foreach no json_encode() alguém poderia me ajudar, eu estou tentando monta um mecanismo de refresh em tempo real de uma lista de notificação veja abaixo:
       
      <script type="text/javascript"> function make_call() { // Fazendo requisição AJAX $j.post('teste.php', function (frase) { // Exibindo frase $j('#listas').html('<i>' + frase + '</i>'); }, 'JSON'); setTimeout(function(){ make_call(); }, 5000); } </script>
      Aqui é o arquivo que quero enviar para a div #lists
       
      <?php require("conexao/directory.php"); $notificar = $db->query("select TOP 5 * from Techi7CP.dbo.cabal_notificacao_geral order by regdate desc"); $notificacao = $notificar->fetchAll(); $count_notificacao = abs($notificar->rowCount()); if($count_notificacao==0){ echo '<li style="text-align:center;">não existe notificações no momento.</li>'; }else{ foreach($notificacao as $notif){ $consulta_conta = $db->query("select * from account.dbo.cabal_auth_table where UserNum='".$notif['usernum']."'")->fetchObject(); switch($notif['acao']){ case 'logadopremiado' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle red small">redeem</span>'.$notif['jogador'].' ganhou no Logado Premiado</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'mudarsenha' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle teal small">vpn_key</span>'.$consulta_conta->Nome.' alterou sua senha</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'distribuirpontos' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle cyan small">control_point</span>'.$notif['jogador'].' distribuiu seus pontos</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'girodasorte' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle brown small">star_border</span>'.$consulta_conta->Nome.' usou o giro da sorte</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'sistematpoint' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle green small">golf_course</span>'.$notif['jogador'].' recebeu seu tpoint por clique</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'combo' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle amber small">videogame_asset</span>'.$notif['jogador'].' fez '.$notif['ExtraDetalhes'].' em sua primeira vez</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; } } } ?> como eu faria para ser exibido todos os resultados registrados com o json_encode().
    • By mamotinho
      Olá, pessoal mais uma vez venho pedi a ajuda de vocês estou com um problema ao roda uma query que montei, eu sou iniciante na area e não tenho muito conhecimento então o codigo que fiz foi parte de meu conhecimento básico. bom o que eu quero resolver nessa query é o seguinte, eu quero consultar uma tabela e nela pega todos os registros com a a data vencida e lista ela dentro do while em seguida retornar dentro desse if o valor da coluna de cada uma exemplo de como fiz e ficou com loop infinito.

       
      declare @id int declare @getdate datetime select @id = IDCadastrado, @getdate = RegDate from BancoTeste.dbo.MinhaTabela where RegDate < getdate() while @id is not null begin select * from BancoTeste.dbo.MinhaTabela where IDCadastrado = @id end quando eu executo isso ai ele executa infinitamente o valor do primeiro registro repetidamente.
    • By mamotinho
      Olá, estou com dúvidas , eu tenho a seguinte execução 
       
      SELECT SUM(Cash) as soma FROM CashAccount Eu estou querendo pega o resultado desta consulta em PHP
      tipo
       
      $result = $pdo->query("SELECT SUM(Cash) as soma FROM CashAccount"); echo $result; Mais não sei como fazer aparece o mesmo resultado que é exibido quando eu faço a execução da query no SQL, por favor alguém poderia me informar como eu poderia está fazendo.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.