Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Compartilhar este post


Link para o post
Compartilhar em outros 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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por FabianoSouza
      Preciso corrigir o erro "Somente uma expressão pode ser especificada na lista de seleção quando a subconsulta não é introduzida com EXISTS." da minha consulta.
      SELECT TA.titulo AS 'Trilha' , (SELECT CAST(ROUND((Comportamental * 100.0) / (Comportamental + Técnico), 2) AS DECIMAL(5,1)) AS Comportamental ,CAST(ROUND((Técnico * 100.0) / (Comportamental + Técnico), 2) AS DECIMAL(5,1)) AS Técnico FROM ( SELECT SUM(CASE WHEN dbo.tabB.enfoque = '1' THEN 1 ELSE 0 END) AS Comportamental, SUM(CASE WHEN dbo.tabB.enfoque = '2' THEN 1 ELSE 0 END) AS Técnico, COUNT(*) AS Total FROM dbo.tabB ) tab ) FROM dbo.tabA AS TA Nessa consulta, preciso trazer o título (da tabA) e o resultado de um cálculo feito na subconsulta, nos campos Comportamental e Técnico.
    • Por JoãoNeto2
      Eu estava usando um programa em PHP que conectava e lia um banco de dados SQL Server. Do nada ele parou de funcionar apresentando a seguinte mensagem :
      O cliente não pode estabelecer conexão porque foi encontrado um erro durante os handshakes anteriores ao logon. As causas comuns incluem a tentativa do cliente de conectar-se a uma versão sem suporte do SQL Server, o servidor muito ocupado para aceitar novas conexões ou uma limitação de recursos (memória ou máximo de conexões permitidas) no servidor.
      Algumas informações para esclarecer :
      1-Consigo conectar o banco via Dbeaver da própria máquina que o programa PHP deixou de funcionar
      2-De outra máquina consigo conectar esse mesmo banco com o mesmo programa PHP
      3-Essa mesma máquina conecta outro banco SQL Server de outro cliente
      Ou seja, o mesmo programa conecta o mesmo banco mas de outra máquina e a mesma máquina consegue conectar outro banco SQL.
      O que pode ser?
    • Por janir.matheus
      Boa tarde, peço ajuda dos membros desse fórum pois confesso estar completamente perdido.
      Tomando como base o diagrama (em anexo), preciso de uma query que retorne as empresas, seus produtos e as categorias de cada produto, sendo que cada produto pode pertencer a uma ou mais categorias.
       
      select tbl_produtos.Empresa, tbl_empresas.Nome, tbl_catprod.Categoria, tbl_classproduto.Classe, tbl_produtos.Id, tbl_produtos.Produto from tbl_produtos inner join tbl_empresas on tbl_produtos.Empresa = tbl_empresas.Id left join tbl_catprod on tbl_produtos.Id = tbl_catprod.Categoria left join tbl_classproduto on tbl_catprod.Categoria = tbl_classproduto.Id; Tentei a consulta mostrada acima mas o resultado não foi o que eu esperava.
      Agradeço antecipadamente pela ajuda.

    • Por FabianoSouza
      Pessoal, por que essa query com COLLATE  não funciona?
      declare @strPesquisa varchar(30) SET @strPesquisa = 'naicle' SET @sql = 'SELECT ' SET @sql = @sql + 'ML.nome ' SET @sql = @sql + 'FROM ' SET @sql = @sql + 'dbo.minhaTab AS ML ' SET @sql = @sql + ' WHERE ' SET @sql = @sql + ' nome LIKE ' SET @sql = @sql + '''%' + @strPesquisa COLLATE Latin1_General_CI_AI + '%''' EXEC (@sql) Não acusa erro ao rodar.
      Mas não traz os registro porque está gravado como "naiclê" (com acento), o que significa que não está aplicando a COLLATE.
       
      Montando essa mesma query mas da forma tradicional, o COLLATE funciona.
       
      SELECT ML.nome FROM dbo.minhaTab AS ML WHERE nome LIKE '%'+ @strPesquisa COLLATE Latin1_General_CI_AI+'%'  
       
    • Por 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';  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.