Inquiridor
select com group by

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.
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?
-
-
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!!!
-
-
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.
-
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!!
-
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
-
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!!