¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

¡Acceso SAP S/4HANA desde $100!

Acceso a SAP

Como criar uma cadeia concatenada de grupos no Crystal para funções de funcionários - Guia passo a passo e SQL incluído

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 31 Vistas
0
Cargando...

Olá, tenho estado às voltas por horas tentando resolver isso. Espero que alguém possa me ajudar! ?

Tenho 4 tabelas:

1) Field_Tickets - Field_Tickets.field_tickets_id é o campo principal que quero agrupar.

2) Field_Tickets_Has_Employees - Une-se por Field_Tickets.field_tickets_id=Field_Tickets_Has_Employees.field_tickets_id.

3) Employees - Une-se por Field_Tickets_Has_Employees.employees_id=Employees.employees_id

4) Employee_Roles - Une-se por Field_Tickets_Has_Employees.employee_roles_id=Employee_Roles.employee_roles_id

Gostaria de criar uma cadeia concatenada de grupos no Crystal que se pareça com o seguinte resultado:

Supervisor        Lynn Jones

Assistente               Alan Cyr

Tive que escrever duas declarações separadas, na janela de comandos, para alcançar o que procuro e mesmo assim não associa o papel correto ao empregado correspondente. Preciso escrever em um único select group_concat, mas tenho estado às voltas por muitas horas agora. Aqui está o SQL que escrevi:


select ft.field_tickets_id,

(SELECT GROUP_CONCAT(CONCAT(emp.employee_first_name, ' ',emp.employee_last_name, '\n') SEPARATOR'') from employees AS emp WHERE (SELECT DISTINCT(fte.employees_id) from field_tickets_has_employees as fte WHERE ft.field_tickets_id=fte.field_tickets_id AND fte.employees_id=emp.employees_id AND IsNull(fte.deleted_at) AND fte.employee_roles_id IN (281, 282, 283, 284) group by ft.field_tickets_id)) AS employeelist,

(SELECT GROUP_CONCAT(CONCAT(emprole.employee_role_name, '', '\n') SEPARATOR '') from employee_roles AS emprole WHERE (SELECT DISTINCT(fte2.employees_id) from field_tickets_has_employees as fte2 WHERE ft.field_tickets_id=fte2.field_tickets_id AND fte2.employee_roles_id=emprole.employee_roles_id AND IsNull(fte2.deleted_at) AND fte2.employee_roles_id IN (281, 282, 283, 284) group by ft.field_tickets_id)) AS emplistroles

from field_tickets AS ft

INNER JOIN jobs ON ft.jobs_id=jobs.jobs_id where

IsNull(ft.deleted_at)


Obrigado!

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá Jamie... a apresentação do relatório está me levando a isso. Além disso, existem duas tabelas de subformulários ligadas à tabela principal de tickets de campo: field_tickets_has_employees.field_tickets_id e field_tickets_has_resources.field_tickets_id são ambos subformulários ligados à tabela principal field_tickets.field_tickets_id.

Portanto, não posso unir ambas as tabelas diretamente na consulta SQL principal (estou usando o banco de dados MySQL) pois isso gera múltiplos registros. Tentei agrupar, mas não faz sentido porque o Crystal agrupa de forma linear e essas duas tabelas são completamente separadas.

Além disso, divido os dados do subformulário dentro do relatório. Por exemplo, dependendo do employee_roles_id, colocarei alguns registros da tabela field_tickets_has_employees no lado esquerdo do relatório e diferentes valores de employee_roles_id serão colocados em algum lugar do lado direito do relatório. Entre eles, serão intercalados registros da tabela field_tickets_has_resources.

Faz sentido?

Mark

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Mark,

Você está utilizando mysql? Caso contrário, qual banco de dados você está usando?... pode haver outras opções que usem um conjunto de subconsultas.

Se estiver utilizando mysql, você poderia tentar eliminar as subconsultas separadas e criar uma tabela derivada definida em um join. Por exemplo, você pode ver aqui . Dessa forma, teoricamente você poderia trazer informações de funcionário e papel de uma vez.

Pergunta... Houve alguma razão em particular pela qual optou pelas subconsultas em vez de criar o relatório a partir das 4 tabelas? É por causa dos duplicados?

-Jamie

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Jamie... obrigado pela sua resposta. Você está certo... eu quero uma declaração de subseleção que conecte o employees_id com o employee_roles_id. Meu SQL continua falhando quando tento fazer essa conexão comum em uma declaração de subseleção. Se eu puder resolver esse problema, posso aplicá-lo a tantos outros cenários para reduzir minha dependência de subconsultas.

Obrigado,
Mark

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Mark,

Há alguma razão específica pela qual você deseja usar Group_Concat além de formatar uma lista de funcionários e cargos em formato vertical?

A razão pela qual pergunto é que você deve ser capaz de criar esse tipo de formato no Crystal Reports simplesmente trazendo suas 4 tabelas usando os links que você descreveu acima (ou seja, sem as subconsultas), agrupando por ticket_id e, em seguida, colocando um crosstab no cabeçalho do grupo de ticket id com cargos e nomes de funcionários (usando uma fórmula para concatenar nome e sobrenome) como linhas.

Com uma rápida olhada no SQL, pode ser que você esteja apenas associando um cargo a um ticket id e não necessariamente a um id de funcionário... ou seja, a concatenação de nomes de funcionários é feita ao nível do ticket id e a concatenação de cargos é feita ao nível do ticket id, pois estão em subconsultas de uma consulta principal que não inclui informações do funcionário... suponho que possa haver mais de um id de funcionário por ticket, correto?

-jamie

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeconsultor.com

+1 (305) 285-8622

© 2025 Todos los derechos reservados.

Desarrollado por Prime Consultor

¡Hola! Soy Diana, asesora académica de Prime Consultor, indícame en que Academia SAP estás interesado, saludos!
Hola ¿Buscas Academias SAP?