none
Dúvidas em uma VIEW RRS feed

  • Pergunta

  • Boa tarde a todos tenho a seguinte dúvida:

    Tenho a seguinte view:

    USE [SO2]
    GO
    /****** Object:  View [dbo].[CntMesII]    Script Date: 01/26/2010 12:22:06 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER VIEW [dbo].[CntMesII]
    AS
    SELECT     TOP (100) PERCENT Ano, Trimestre, Mes,
                          (CASE Mes WHEN 1 THEN 'Janeiro' WHEN 2 THEN 'Fevereiro' WHEN 3 THEN 'Março' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Maio' WHEN 6 THEN 'Junho'
                           WHEN 7 THEN 'Julho' WHEN 8 THEN 'Agosto' WHEN 9 THEN 'Setembro' WHEN 10 THEN 'Outubro' WHEN 11 THEN 'Novembro' WHEN 12 THEN 'Dezembro'
                           END) AS MesNome, COUNT(RegTotal) AS RegTotal, COUNT(CASE WHEN (RegFonte >= 45) THEN 1 END) AS RegFonte,
                          COUNT(CASE WHEN (RegValidos >= 45) THEN 1 END) AS RegValidos, COUNT(CASE WHEN (MediaValida >= 1440 AND RegValidos >= 45) THEN 1 END)
                          AS RegValidos_80, COUNT(CASE WHEN (MediaValida >= 3600 AND RegValidos >= 45) THEN 1 END) AS RegValidos_200,
                          COUNT(CASE WHEN (MediaValida >= ******   AND RegValidos >= 45) THEN 1 END) AS RegValidos_Norma, AVG(MediaValida) AS MediaTotal,
                          AVG(CASE WHEN RegValidos >= 45 THEN CAST(MediaValida AS real) END) AS MediaValida, MAX(MediaValida) AS MaxTotal,
                          MAX(CASE WHEN RegValidos >= 45 THEN CAST(MediaValida AS real) END) AS MaxValido, COUNT(CASE WHEN (RegInvalidos > 15) THEN 1 END)
                          AS RegInvalidos, COUNT(CASE WHEN (RegTolerancia > 15) THEN 1 END) AS RegTolerancia
    FROM         dbo.CntHora
    GROUP BY Ano, Trimestre, Mes
    ORDER BY Ano, Trimestre, Mes

    Nesta view aonde estão os ****** preciso ir buscar um valor no campo (VLE) que se encontra em outra tabela (cliente)

    Fiz o seguinte (MediaValida >= (select vle from clientes) AND RegValidos >= 45) e me dá o seguinte erro

    Cannot perform an aggregate function on an expression containing an aggregate or a subquery

    Como posso fazer para resolver isso


    Muito obrigado a todos.
    terça-feira, 26 de janeiro de 2010 12:27

Respostas

  • Já consegui resolver o problema.

    Esta view fazia referencia a outra view, simplesmente adicionei a coluna vle da tabela de clientes no select da 1ª view.

    Muito obrigado a todos.
    terça-feira, 26 de janeiro de 2010 15:26

Todas as Respostas

  • Pedro confirme qts linhas essa query esta retornando " select vle from clientes ".

    pois o problema deve est ai.
    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    terça-feira, 26 de janeiro de 2010 12:47
  • Boas Leonardo,

    Faço a query na table clientes e me retorna o valor que preciso em uma linha só...

    Obrigado
    terça-feira, 26 de janeiro de 2010 12:57
  • Bom Dia,

    Já faz tempo que não vejo alguns operadores ANSI sendo necessários, mas tente as seguintes combinações:

    MediaValida >= all (select vle from clientes)
    MediaValida >= any (select vle from clientes)

    Ainda assim é muito difícil utilizarmos tais operadores. Talvez haja outra forma de reescrever sua consulta.
    Recomendo também evitar utilizar o Wizard para construir views, principalmente em relação a ORDER BY.

    Piores práticas - Utilizar a cláusula ORDER BY em Views
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!292.entry

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    A quantidade de linhas fala por si só ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!926.entry
    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 26 de janeiro de 2010 13:25
  • Boa tarde gustavo,

    Experimentei com os dois parametros acima o ALL e o ANY e não funcionou. Vou esclarecer uma coisa, esta é uma VIEW que vem do SQL 2000, no entanto a base de dados foi migrada para o 2005 e agora surgiu a necessidade de alterar esta VIEW.

    É necessário remover a instrução do ORDER BY? É que fiz isso e também não funciona...


    terça-feira, 26 de janeiro de 2010 13:39
  • Já consegui resolver o problema.

    Esta view fazia referencia a outra view, simplesmente adicionei a coluna vle da tabela de clientes no select da 1ª view.

    Muito obrigado a todos.
    terça-feira, 26 de janeiro de 2010 15:26