none
Grroup By com campos varchar e datetime RRS feed

  • Pergunta

  • Pessoal tenho a seguinte query abaixo esta trazendo da forma mque preciso pois estou usando group by porém preciso de alguns campos stringd r datetime que não estão no select.

    Gostaria de saber se consigo trazer os campos que estão comendados

    --S.Created, SQ.Observation, Q.QuestionDescription, I.InformationDescription--

    Usando esta mesma query.

    SELECT SQ.TypeID, SQ.ChurchID, SQ.SafeID, SQ.QuestionID, SQ.UserID , SQ.Status

    --Preciso dos campos baiaxo tambe neste sellect--

    --S.Created, SQ.Observation, Q.QuestionDescription, I.InformationDescription--

    FROM SafeQuestion AS SQ INNER JOIN Information AS I ON SQ.TypeID = I.TypeID AND SQ.QuestionID = I.QuestionID INNER JOIN Question AS Q ON SQ.TypeID = Q.TypeID AND SQ.QuestionID = Q.QuestionID INNER JOIN Safe AS S ON SQ.ChurchID = S.ChurchID WHERE ((Q.QuestionDescription LIKE '%conta%') OR(I.InformationDescription LIKE '%conta%')) GROUP BY SQ.TypeID, SQ.ChurchID, SQ.SafeID, SQ.QuestionID, SQ.UserID , SQ.Status HAvING (SQ.ChurchID = 1024) AND (SQ.TypeID = 4)


    att.

    Moizés Cerqueira | MCP
    Site: www.moizes.cerqueira.nom.br
    Twitter: @moicer

    quarta-feira, 4 de abril de 2012 18:21

Respostas

  • Moizés, na verdade campos varchar e datetime são aceitos em group by sim.

    veja este exemplo:

    create table teste26 ( id int identity, nome varchar(20), data datetime, teste int);
    
    insert into teste26 values
    ('marcus',sysdatetime(),1),
    ('vinícius',sysdatetime(),2),
    ('bittencourt',sysdatetime(),3),
    ('database',sysdatetime(),2),
    ('administrator',sysdatetime(),1),
    ('marcus',sysdatetime(),2),
    ('bittencourt',sysdatetime(),1)
    
    
    select distinct(nome),data, sum(teste) from teste26 group by nome,data having  sum(teste)  >1


    estou fazendo um group by com varchar e datetime.

    O problema é que tu esta ordenando o grupo com campos text, isto sim não é possível.

    veja o exemplo:

    select distinct(nome),data, sum(teste) from teste26 group by nome,data having  sum(teste)  >1
    
    create table teste27 ( id int identity, nome text)
    
    insert into teste27 values('marcus');
    
    select * from teste27 order by nome

    Msg 306, Level 16, State 2, Line 1
    The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.



    --
    Marcus Vinícius Bittencourt
    blog: isqlserver.wordpress.com
    www.sqlserverRS.com.br



    quarta-feira, 4 de abril de 2012 19:45

Todas as Respostas

  • Moisés, boa tarde.

    É só incluir nos campos do select e no group by.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 4 de abril de 2012 18:23
  • Sim amigo, mas são campos varchar e datetime que são diferentes. O não são aceitos em group by.


    Moizés Cerqueira | MCP
    Site: www.moizes.cerqueira.nom.br
    Twitter: @moicer


    Msg 8120, Level 16, State 1, Line 1

    Column 'Safe.Created' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

    quarta-feira, 4 de abril de 2012 18:26
  • Boa tarde Moizés,

    Fazendo o select abaixo dá alguma mensagem de erro ou não retorna o que você precisa?

    SELECT SQ.TypeID,
           SQ.ChurchID,
           SQ.SafeID,
           SQ.QuestionID,
           SQ.UserID,
           SQ.Status,   
           S.Created,
           SQ.Observation,
           Q.QuestionDescription,
           I.InformationDescription --
      FROM SafeQuestion AS SQ
     INNER JOIN Information AS I
        ON SQ.TypeID = I.TypeID
       AND SQ.QuestionID = I.QuestionID
     INNER JOIN Question AS Q
        ON SQ.TypeID = Q.TypeID
       AND SQ.QuestionID = Q.QuestionID
     INNER JOIN Safe AS S
        ON SQ.ChurchID = S.ChurchID
     WHERE ((Q.QuestionDescription LIKE '%conta%') OR
           (I.InformationDescription LIKE '%conta%'))
     GROUP BY SQ.TypeID,
              SQ.ChurchID,
              SQ.SafeID,
              SQ.QuestionID,
              SQ.UserID,
              SQ.Status,         
              S.Created,
              SQ.Observation,
              Q.QuestionDescription,
              I.InformationDescription
    
    HAvING(SQ.ChurchID = 1024) AND (SQ.TypeID = 4)

    quarta-feira, 4 de abril de 2012 18:55
  • Retorn ao seguinte erro:

    Msg 306, Level 16, State 2, Line 30

    The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.


    Moizés Cerqueira | MCP
    Site: www.moizes.cerqueira.nom.br
    Twitter: @moicer


    quarta-feira, 4 de abril de 2012 19:00
  • Moizés,

    Alguma das colunas (S.Created, SQ.Observation, Q.QuestionDescription, I.InformationDescription) é do BLOB (text, ntext, and image)?

    se for veja a possibilidade de fazer uma conversão da coluna para o tipo varchar ( tanto no select quanto no group by ).

    QUalquer dúvida ou problema posta ai.

    Abçs,

    Adriano

    quarta-feira, 4 de abril de 2012 19:29
  • Moizés, na verdade campos varchar e datetime são aceitos em group by sim.

    veja este exemplo:

    create table teste26 ( id int identity, nome varchar(20), data datetime, teste int);
    
    insert into teste26 values
    ('marcus',sysdatetime(),1),
    ('vinícius',sysdatetime(),2),
    ('bittencourt',sysdatetime(),3),
    ('database',sysdatetime(),2),
    ('administrator',sysdatetime(),1),
    ('marcus',sysdatetime(),2),
    ('bittencourt',sysdatetime(),1)
    
    
    select distinct(nome),data, sum(teste) from teste26 group by nome,data having  sum(teste)  >1


    estou fazendo um group by com varchar e datetime.

    O problema é que tu esta ordenando o grupo com campos text, isto sim não é possível.

    veja o exemplo:

    select distinct(nome),data, sum(teste) from teste26 group by nome,data having  sum(teste)  >1
    
    create table teste27 ( id int identity, nome text)
    
    insert into teste27 values('marcus');
    
    select * from teste27 order by nome

    Msg 306, Level 16, State 2, Line 1
    The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.



    --
    Marcus Vinícius Bittencourt
    blog: isqlserver.wordpress.com
    www.sqlserverRS.com.br



    quarta-feira, 4 de abril de 2012 19:45