none
select com group by RRS feed

  • Pergunta

  • Pessoal,

    Tenho o scritp abaixo e preciso agrupar pela ordem de servico(idOrdemServico)

    SELECT
    dbo.tbOrdemServico.idOrdemServico,
    dbo.tbCliente.Nome,
    dbo.tbOrdemServico.QTDEEstampada,
    dbo.tbOrdemServico.QTDEDefeito,
    dbo.tbOrdemServico.QTDEFurada,
    dbo.tbOrdemServico.DataBaixa,
    dbo.tbOrdemServico.OBSBaixa,
    dbo.tbEstampa.RefEstampa,
    dbo.tbEstampa.Estampa,
    dbo.tbItemOrdemServico.Unidade,
    dbo.tbCor.Cor AS CorTecido,
    tbCor1.Cor AS CorEstampa1,
    tbCor2.Cor AS CorEstampa2,
    tbCor3.Cor AS CorEstampa3,
    tbCor4.Cor AS CorEstampa4,
    tbCor5.Cor AS CorEstampa5,
    tbCor6.Cor AS CorEstampa6,
    dbo.tbProcesso.Processo,
    dbo.tbTarefa.FDataHora,
    dbo.tbTarefa.IDataHora,
    dbo.tbFuncionario.Nome AS Conferente,
    tbFuncionario1.Nome AS Funcionario
    FROM
    dbo.tbOrdemServico
    INNER JOIN dbo.tbCliente ON (dbo.tbOrdemServico.idCliente = dbo.tbCliente.idCliente)
    INNER JOIN dbo.tbEstampa ON (dbo.tbOrdemServico.idEstampa = dbo.tbEstampa.idEstampa)
    INNER JOIN dbo.tbItemOrdemServico ON (dbo.tbOrdemServico.idOrdemServico = dbo.tbItemOrdemServico.idOrdemServico)
    LEFT OUTER JOIN dbo.tbCor ON (dbo.tbItemOrdemServico.idCorTecido = dbo.tbCor.idCor)
    LEFT OUTER JOIN dbo.tbCor tbCor1 ON (dbo.tbItemOrdemServico.idCorEstampa1 = tbCor1.idCor)
    LEFT OUTER JOIN dbo.tbCor tbCor2 ON (dbo.tbItemOrdemServico.idCorEstampa2 = tbCor2.idCor)
    LEFT OUTER JOIN dbo.tbCor tbCor3 ON (dbo.tbItemOrdemServico.idCorEstampa3 = tbCor3.idCor)
    LEFT OUTER JOIN dbo.tbCor tbCor4 ON (dbo.tbItemOrdemServico.idCorEstampa4 = tbCor4.idCor)
    LEFT OUTER JOIN dbo.tbCor tbCor5 ON (dbo.tbItemOrdemServico.idCorEstampa5 = tbCor5.idCor)
    LEFT OUTER JOIN dbo.tbCor tbCor6 ON (dbo.tbItemOrdemServico.idCorEstampa6 = tbCor6.idCor)
    INNER JOIN dbo.tbTarefa ON (dbo.tbOrdemServico.idOrdemServico = dbo.tbTarefa.idOrdemServico)
    INNER JOIN dbo.tbProcesso ON (dbo.tbTarefa.idProcesso = dbo.tbProcesso.idProcesso)
    INNER JOIN dbo.tbFuncionario ON (dbo.tbTarefa.idConferente = dbo.tbFuncionario.idFunc)
    INNER JOIN dbo.tbFuncionario tbFuncionario1 ON (dbo.tbTarefa.idFunc = tbFuncionario1.idFunc)
    WHERE
    dbo.tbOrdemServico.idOrdemServico = '00033'
    group by
    dbo.tbOrdemServico.idOrdemServico,
    dbo.tbCliente.Nome,
    dbo.tbOrdemServico.QTDEEstampada,
    dbo.tbOrdemServico.QTDEDefeito,
    dbo.tbOrdemServico.QTDEFurada,
    dbo.tbOrdemServico.DataBaixa,
    dbo.tbOrdemServico.OBSBaixa,
    dbo.tbEstampa.RefEstampa,
    dbo.tbEstampa.Estampa,
    dbo.tbItemOrdemServico.Unidade,
    dbo.tbCor.Cor,
    tbCor1.Cor,
    tbCor2.Cor,
    tbCor3.Cor,
    tbCor4.Cor,
    tbCor5.Cor,
    tbCor6.Cor,
    dbo.tbProcesso.Processo,
    dbo.tbTarefa.FDataHora,
    dbo.tbTarefa.IDataHora,
    dbo.tbFuncionario.Nome,
    tbFuncionario1.Nome

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

    Alguma dica ?????

    Obrigado.
    segunda-feira, 21 de janeiro de 2008 15:21

Todas as Respostas

  • Gilberto,

     

    A Mensagem de erro esta informação que campos do tipo: Text, NText e Imagem não podem ser comparados ou organizados, somente quando estiver utilizando operadores IsNull ou Like!!!

     

    Você esta provavelmente utilizando um testes tipos de datatype?

     

    segunda-feira, 21 de janeiro de 2008 15:36
  • Resolvido.

    Solução:

    Por distração, incluí na lista o campo OBSBaixa esse campo é um campo memo. Foi só retira-lo da lista e acrescentar a clausula MAX antes de cada campo que não faz parte do agrupamento e pronto. Funcionou.

     

    Obrigado.

     

    segunda-feira, 21 de janeiro de 2008 15:48
  •  

    Olá Gilberto,

     

    Não consegui entender qual a intenção de agrupar pelo ID. Tente postar aqui algum exemplo de resultado esperado, assim fica mais simples de entender o seu problema. Além de que faltou usar alguma função de agregação.

     

     

    Mas, a mensagem de erro está sendo causada por algum campo do tipo Text, NText ou Image que está sendo usado na consulta e não é possível.

     

     

    Abraço!!!

    segunda-feira, 21 de janeiro de 2008 15:58
  • Gilberto,

     

    Que bom que resolveu, mas você poderia explicar melhor a sua necessidade para que a gente possa entender melhor!!!

     

    segunda-feira, 21 de janeiro de 2008 16:08
  • Olá,

     

    Como estou iniciando com SQL, essa foi a maneira que de fazer não sei se é a melhor mas com as pesquisas que estou fazendo, com certeza dias melhores virão.

     

    Tenho uma tabela tbOrdemServico e outra tbItemOrdemServico essa ordem, tem três itens e o que eu preciso fazer é:

     

    Lista apenas um dos três itens da tabela tbItemOrdemServico por isso agrupei por idOrdemServico

     

    Não sei se fui claro na explicação mas de qualquer maneira, agradeço a todos que se manifestaram.

     

    Obrigado.

    segunda-feira, 21 de janeiro de 2008 16:32
  •  

    Gilberto,

     

    A forma que você fez pode ter deixado de gerar erro, mas ao mesmo tempo pode retornar uma informação errada, pois colocando o MAX, não significa que ele vai pegar a informação do maior registro dentro da tabela de detalhes, mas sim o valor com a informação maior, se são 3 registros de detalhe, pode acontecer e no primeiro campo ele pegar o dado do registro 3, no segundo do registro 1 e no terceiro do 2. Se for um campo varchar, basta que na informação se tenho algo escrito que comece com a letra Z que ele trará essa informação.

     

    Então, precisamos ter bastante cuidado.

     

    Se você está começando em T-SQL, eu recomendaria que procurasse algum livro só sobre a linguagem. A Microsoft tinha um curso do SQL 2000 que tratava somente da parte de criação de consultas, pena que esse curso quase não é mais ministrado, mas é muito bom. Inclusive, semana que vem estarei ministrando este curso, mas, sinceramente, não me recordo quando foi a última vez que ministrei ele, faz muuuito tempo.

     

     

    Grande abraço!!

    segunda-feira, 21 de janeiro de 2008 17:07
  • Olá Alexandre,

     

    O curso a que você se refere é o 2071 - Querying with Transact-SQL. É um curso voltado a consultas com o TSQL. Considero-o um curso muito importante sem dúvida. Acho que todos os que se iniciam em SQL Server e em SQL deveriam fazer. No caso do 2005, não há um curso presencial equivalente.

     

    Aos que se interessarem, existe o curso 2778 - Writing Queries Using MSSQL Server 2005 Transact-SQL. O problema é que não existe esse curso em sala de aula. O mesmo está disponível apenas sob a modalidade de E-Learning.

     

    [ ]s,

     

    Gustavo

    segunda-feira, 21 de janeiro de 2008 17:30
  •  

    Gustavo,

     

    É, exatamente esse. Eu considero esse curso muito importante, tanto para programadores quanto para administradores. Nele são passadas várias dicas, principalmente sobre experiências do dia-a-dia, que são as mais importantes.

     

    Esse não é um curso muito voltado a questão de desempenho em consultas, mas gosto de "perder" algum tempo falando disso.

     

     

    E... é uma pena que não tem a versão para o 2005, E-Learning é bom, mas nesse caso acho que teria que ser presencial, minha opinião...

     

     

     

     

    Abraço!!

    segunda-feira, 21 de janeiro de 2008 18:46