Tengo un código SQL que arroja un error que dice

Error: SQLCODE = -119, SQLSTATE = 42803, SQLERRMC = WONUM

El código funciona bien hasta que agregue el grupo por:

  select *
  from workorder 
  left join labtrans on  labtrans.refwo=workorder.wonum and labtrans.siteid=workorder.siteid
  left join matusetrans on workorder.wonum=matusetrans.refwo and workorder.siteid=matusetrans.tositeid  and linetype not in (select value from synonymdomain where domainid='LINETYPE' and maxvalue='TOOL')
  left join  locations  on locations.location = workorder.location and locations.siteid=workorder.siteid
  left join person on personid in (select personid from labor where laborcode = labtrans.laborcode)
  left join po on workorder.wonum=po.hflwonum and workorder.siteid=po.siteid and workorder.orgid=po.orgid
  left join companies on companies.company = po.vendor and companies.orgid=po.orgid
  left join pluspcustomer on pluspcustomer.customer=workorder.pluspcustomer
  where workorder.wonum='10192'
  group by personid
 ;
0
Karen 4 abr. 2017 a las 16:32

2 respuestas

La mejor respuesta

Si solo GROUP BY personid, no puede seleccionar todo excepto personid, O los campos utilizados por funciones agregadas como SUM, MAX, etc.

ACTUALIZACIÓN

Si solo quiere ver el duplicado personid, puede usar:

 select personid 
 from table 
 group by personid 

Pero tenga cuidado aquí: si escribe una consulta como esta, el único campo que para determinar los registros duplicados es persionid, si necesita identificar de forma única cada persionid de diferente CompanyId, necesita a group by persionid, CompanyId, de lo contrario, los mismos personId de diferentes compañías se considerarán como registros duplicados.

Pero si desea eliminar esos registros duplicados, debe usar ROW_NUMBER()OVER (Partition by persionid Order by your_criteria) para eliminar los registros duplicados. Intente hacer algunas búsquedas para ver cómo funciona eso, generalmente prefiero usar esa función junto con CTE table expression.

2
LONG 4 abr. 2017 a las 13:55

Si solo necesita eliminar duplicados, use DISTINCT con su consulta de esta manera:

Su consulta:

SELECT * FROM  .....

Modificarlo:

SELECT DISTINCT * FROM .....

Espero que ayude.

1
Dheeraj Sharma 4 abr. 2017 a las 13:50