none
Consulta com várias tabelas RRS feed

  • Pergunta

  • Olá a todos

    Tenho as seguintes tabelas:

    hwF3v.png

    PYUlY.png

    DFGOY.png

    Necessito criar uma consulta que totalize por DATA, CODIGO_FUNCI, CODIGO_OPE e HORA. sendo o campo HORA separado por horários(07:00 as 07:59, 08:00 as 08:59, 09:00 as 09:59, 10:00 as 10:59, e assim por diante. A consulta ficaria mais ou menos assim:

    GotTh.png

    Lembrando que as as tabelas acima sofrerá alterações dia a dia.

    Desde já agradeço.

    sábado, 13 de agosto de 2022 06:35

Todas as Respostas

  • Boa tarde,

    Para esse tipo de resultado você pode utilizar o operador Pivot:

    https://docs.microsoft.com/pt-br/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver16

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    domingo, 14 de agosto de 2022 14:15
  • Marcos, boa noite!

    Neste seu post terias essa quebra! 

    https://social.msdn.microsoft.com/Forums/pt-BR/2e687de0-3534-47b0-ab0e-67be83698a80/gerar-consulta-separada-por-horrios?forum=transactsqlpt 

    Não conseguiu fazer o JOIN entre as tabelas? Se não conseguir, nós avise por favor, que iremos lhe ajudar! 

    Abraços.

    segunda-feira, 15 de agosto de 2022 00:10
  • Marcos,

    Tomei como base os dados que você compartilhou!

    Na verdade sua necessidade se relaciona com a implementação do operador Pivot, o qual tem o objetivo de transformar valores armazenados em linhas como novas colunas na apresentação do resultado.

    Pensei inicialmente neste implementação:

    -- Criando as Tabelas -- Create Table Funcionarios (Codigo Int Primary Key, Nome Varchar(30)) Go Create Table Operacao (Codigo Int Primary Key Identity(1,1), Descricao Varchar(30)) Go Create Table Producao (CodigoProducao Int Primary Key Identity(1,1), CodigoFuncionario Int Not Null, CodigoOperacao Int Not Null, DataProducao Date Not Null, HoraProducao Time Not Null, Quantidade Int Not Null) Go -- Adicionando os relacionamentos -- Alter Table Producao Add Constraint [FK_Producao_Operacao] Foreign Key (CodigoOperacao) References Operacao (Codigo) Go Alter Table Producao Add Constraint [FK_Producao_Funcionario] Foreign Key (CodigoFuncionario) References Funcionarios (Codigo) Go -- Inserindo os dados -- Insert Into Operacao Values ('Travetar'),('Chuliar'),('Cortar'),('Enfestar') Go Insert Into Funcionarios Values (1020, 'Marcos'),(3025, 'José'),(2223, 'Maria'),(4025, 'Carlos'),(3262, 'João') Go Insert Into Producao (CodigoFuncionario, CodigoOperacao, DataProducao, HoraProducao, Quantidade) Values (1020, 1, '2022-06-22','07:30:32',15), (3025, 2, '2022-06-22','07:11:10',12), (2223, 3, '2022-06-22','07:15:00',20), (1020, 1, '2022-06-22','08:23:52',32), (3025, 2, '2022-06-22','08:55:01',16), (1020, 1, '2022-06-22','09:16:17',20), (4025, 1, '2022-06-22','10:20:12',14), (3262, 2, '2022-06-22','07:02:30',8), (4025, 1, '2022-06-22','08:10:12',28), (3262, 4, '2022-06-22','11:15:00',56), (2223, 3, '2022-06-22','09:40:23',33), (3025, 2, '2022-06-22','10:25:26',13) Go -- Consultando --

    Select Distinct 
               P.DataProducao,
               P.CodigoFuncionario, F.Nome, 
       O.Descricao,
       IsNull((Select Sum(Quantidade) From Producao
                    Where CodigoFuncionario = F.Codigo
    And CodigoOperacao = O.Codigo
    And HoraProducao Between '07:00:00' And '07:59:59'
    Group By CodigoFuncionario, CodigoOperacao, DataProducao, HoraProducao),0) As '07:00 às 07:59',
       IsNull((Select Sum(Quantidade) From Producao
                    Where CodigoFuncionario = F.Codigo
    And CodigoOperacao = O.Codigo
    And HoraProducao Between '08:00:00' And '08:59:59'
    Group By CodigoFuncionario, CodigoOperacao, DataProducao, HoraProducao),0) As '08:00 às 08:59',
       IsNull((Select Sum(Quantidade) From Producao
                    Where CodigoFuncionario = F.Codigo
    And CodigoOperacao = O.Codigo
    And HoraProducao Between '09:00:00' And '09:59:59'
    Group By CodigoFuncionario, CodigoOperacao, DataProducao, HoraProducao),0) As '09:00 às 09:59',
       IsNull((Select Sum(Quantidade) From Producao
                    Where CodigoFuncionario = F.Codigo
    And CodigoOperacao = O.Codigo
    And HoraProducao Between '10:00:00' And '10:59:59'
    Group By CodigoFuncionario, CodigoOperacao, DataProducao, HoraProducao),0) As '10:00 às 10:59',
       IsNull((Select Sum(Quantidade) From Producao
                    Where CodigoFuncionario = F.Codigo
    And CodigoOperacao = O.Codigo
    And HoraProducao Between '11:00:00' And '11:59:59'
    Group By CodigoFuncionario, CodigoOperacao, DataProducao, HoraProducao),0) As '11:00 às 11:59'
    From Producao P Inner Join Funcionarios F
                   On P.CodigoFuncionario = F.Codigo
    Inner Join Operacao O
    On P.CodigoOperacao = O.Codigo
    Go


    Pedro Antonio Galvão Junior [MSc. | MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]




    quarta-feira, 17 de agosto de 2022 17:00