CONSULTA SQL LINHAS EM COLUNAS

ADHEL 03/11/2014 17:29:13
#442273
Pessoal.
Tenho duas tabelas , tecnicos e servicos.

Na tabela tecnicos basicamente é o id(int) e mais um campo chamado tecnico(varchar).
Na tabela servicos tenho um campo chamado idTecnico(int) e outro campo chamado atendimento(date)
Eu preciso fazer uma consulta que me mostre a soma de atendimentos por dia para cada tecnico.
Seria mais ou menos isso abaixo.


Tecnico Segunda Terca Quarta Quinta Sexta

Jose 1 6 2 0 4
Joao 8 0 2 3 5


Pesquisei, pela internet e fiz essa consulta abaixo, que me traz um resultado totalmente errado.
Um monte de atendimentos para os tecnicos.

  [Ô]select t.tecnico,[Ô] &
[Ô] SUM(IF(day(atendimento)=01,s.id,[ô]0[ô])) AS [ô]Segunda[ô],[Ô] &
[Ô] SUM(IF(day(atendimento)=02,s.id,[ô]0[ô])) AS [ô]Terca[ô],[Ô] &
[Ô] SUM(IF(day(atendimento)=03,s.id,[ô]0[ô])) AS [ô]Quarta[ô],[Ô] &
[Ô] SUM(IF(day(atendimento)=04,s.id,[ô]0[ô])) AS [ô]Quinta[ô],[Ô] &
[Ô] SUM(IF(day(atendimento)=05,s.id,[ô]0[ô])) AS [ô]Sexta[ô][Ô] &
[Ô] FROM tecnicos t inner join servicos s on t.id=s.idtecnico and [Ô] +
[Ô] s.data between [ô][Ô] & Format(dtPicker1.Value, [Ô]yyyy-MM-dd[Ô]) & [Ô][ô] and [ô][Ô] & Format(dtPicker2.Value, [Ô]yyyy-MM-dd[Ô]) & [Ô][ô] group by s.idTecnico[Ô], Conexao)


Obrigado desde já a todos.
CARINHENA 04/11/2014 09:59:27
#442283
Se for SQL Server, pode usar o Pivot:
http://www.devmedia.com.br/pivot-no-sql-server-invertendo-linhas-e-colunas-em-um-exemplo-real/28318

http://sqlfromhell.wordpress.com/2013/08/01/transformando-linhas-em-colunas-sem-pivot/
http://debulhado.wordpress.com/2012/07/29/pivot-no-sql-server-parte-ii/


PEGUDO 05/11/2014 10:51:35
#442298
Resposta escolhida
Eu fiz este exemplo aqui, mas com DataSet. Veja se te ajuda e faça as adaptações necessárias.

  • Primeiro: o programa não trabalha com DateTimePicker. O programa pega todos os dias da semana atual. Por exemplo: Como estamos na semana entre os dias 03 e 07, o programa vai retornar todos os dias entre eles, inclusive 3 e 7 (3, 4, 5, 6 e 7). Se estivéssemos na semana do dia 12, o programa retornaria 10, 11, 12, 13, 14 e 15. OBS: não retorna os dias referentes aos Domingos e sábados;
  • Segundo: O programa ficou um pouco extenso porque eu não fiz as contas no SQL e sim no código do programa, mas veja se consegue aproveitar alguma coisa;
  • Terceiro: Estou trabalhando com um ListView;
  • Quarto: Estou utilizando Access e OleDb. Você deve estar usando SqlExpress. Se o código lhe for útil, faça as adaptações.
  • ADHEL 05/11/2014 11:49:01
    #442300
    Obrigado, Carinhena e Pegudo.
    Pegudo farei os testes e entro em contato.
    A princípio fico grato por sua gentileza.
    Ps. Banco utilizado é o MYSQL
    Tópico encerrado , respostas não são mais permitidas