Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Como Eliminar filas con al menos un campo igual o grupar

Estas en el tema de Como Eliminar filas con al menos un campo igual o grupar en el foro de SQL Server en Foros del Web. Que tal compañeros; Miren tengo que contar registros de una cosulta, ya lo hice pero me cuenta filas de mas se debe a que hay ...
  #1 (permalink)  
Antiguo 27/04/2013, 19:10
 
Fecha de Ingreso: abril-2013
Ubicación: Veracruz
Mensajes: 9
Antigüedad: 11 años
Puntos: 0
Mensaje Como Eliminar filas con al menos un campo igual o grupar

Que tal compañeros;

Miren tengo que contar registros de una cosulta, ya lo hice pero me cuenta filas de mas se debe a que hay varias registros con un mismo id y solo necesito los id diferentes como puedo logras esta consulta lo cual es la siguiente:
Código SQL:
Ver original
  1. SELECT [ORD_IDORDEN],[ORD_TIPORDEN],
  2.      Estado=CASE WHEN [ORE_STATUS]='A' THEN 'ABIERTA' WHEN [ORE_STATUS]='DG' THEN 'DETENIDA X GERENCIA' WHEN [ORE_STATUS]='DR' THEN 'DETENIDA POR REFACC' WHEN [ORE_STATUS]='P' THEN 'EN PROCESO' ELSE 'CERRADA' END,
  3.     [ORE_FECHAORD]
  4.     FROM [GOMSA356].[dbo].[SER_ORDENDET] A, [GOMSA356].[dbo].[SER_ORDEN] B
  5.     WHERE A.[ORD_IDORDEN] = [ORE_IDORDEN] AND (B.[ORE_STATUS]= 'A' OR B.[ORE_STATUS] = 'DG' OR B.[ORE_STATUS] = 'DR' OR B.[ORE_STATUS] = 'P' OR B.[ORE_STATUS] = 'T') /*AND ORE_FECHAORD LIKE '%/04/2013' AND ORD_TIPORDEN IN('H', 'J', 'Q', 'S', 'Z')*/
  6.     ORDER BY [ORD_IDORDEN]
este query me manda la consulta que necesito esto lo debo de contar pero
me manda 253 registro y deben ser 116, se debe a que hay varios ORD_IDORDEN iguales debe eliminar estos campos iguales no se como aplicarlo

el resultado que me da es este:

A00145145 A ABIERTA 17/04/2013
A00145145 A ABIERTA 17/04/2013
C00143873 C ABIERTA 04/03/2013
C00143873 C ABIERTA 04/03/2013
C00144083 C ABIERTA 12/03/2013
C00144083 C ABIERTA 12/03/2013
C00144083 C ABIERTA 12/03/2013
C00144083 C ABIERTA 12/03/2013

y quiero que me de:

A00145145 A ABIERTA 17/04/2013
C00143873 C ABIERTA 04/03/2013
C00144083 C ABIERTA 12/03/2013

Última edición por gnzsoloyo; 27/04/2013 a las 21:10
  #2 (permalink)  
Antiguo 27/04/2013, 21:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como Eliminar filas con al menos un campo igual o grupar

Y probaste ponerle DISTINCT?
Código SQL:
Ver original
  1. SELECT DISTINCT
  2.     [ORD_IDORDEN],
  3.     [ORD_TIPORDEN],
  4.     Estado=CASE WHEN [ORE_STATUS]='A' THEN 'ABIERTA' WHEN [ORE_STATUS]='DG' THEN 'DETENIDA X GERENCIA' WHEN [ORE_STATUS]='DR' THEN 'DETENIDA POR REFACC' WHEN [ORE_STATUS]='P' THEN 'EN PROCESO' ELSE 'CERRADA' END,
  5.     [ORE_FECHAORD]
  6. FROM
  7.     [GOMSA356].[dbo].[SER_ORDENDET] A, [GOMSA356].[dbo].[SER_ORDEN] B
  8. WHERE
  9.     A.[ORD_IDORDEN] = [ORE_IDORDEN]
  10.     AND (B.[ORE_STATUS]= 'A'
  11.     OR B.[ORE_STATUS] = 'DG'
  12.     OR B.[ORE_STATUS] = 'DR'
  13.     OR B.[ORE_STATUS] = 'P' OR B.[ORE_STATUS] = 'T')
  14. ORDER BY [ORD_IDORDEN]
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/04/2013, 00:16
 
Fecha de Ingreso: abril-2013
Ubicación: Veracruz
Mensajes: 9
Antigüedad: 11 años
Puntos: 0
Respuesta: Como Eliminar filas con al menos un campo igual o grupar

Gracias me funciona bien, había implementado esto:

Código SQL:
Ver original
  1. SELECT [ORD_IDORDEN], HYP = MAX([ORD_TIPORDEN]),
  2.     --MAX(ESTADO = case when [ORE_STATUS]='A' then 'ABIERTA' when [ORE_STATUS]='DG' then 'DETENIDA X GERENCIA' when [ORE_STATUS]='DR' then 'DETENIDA POR REFACC' when [ORE_STATUS]='P' then 'EN PROCESO' ELSE 'CERRADA' END),
  3.     FECHA = MAX([ORE_FECHAORD])
  4.     FROM [GOMSA356].[dbo].[SER_ORDENDET] A, [GOMSA356].[dbo].[SER_ORDEN] B
  5.     WHERE A.[ORD_IDORDEN] = [ORE_IDORDEN] AND (B.[ORE_STATUS]= 'A' OR B.[ORE_STATUS] = 'DG' OR B.[ORE_STATUS] = 'DR' OR B.[ORE_STATUS] = 'P' OR B.[ORE_STATUS] = 'T') AND ORE_FECHAORD LIKE '%/04/2013' AND ORD_TIPORDEN IN('H', 'J', 'Q', 'S', 'Z')
  6.     GROUP BY [ORD_IDORDEN])

y me da los registros que quiero; claro con distinct elimino filas duplicadas buen dato!!

ya con tu ajuste que da así:

Código SQL:
Ver original
  1. SELECT DISTINCT
  2.     [ORD_IDORDEN],
  3.     [ORD_TIPORDEN],
  4.     Estado=CASE WHEN [ORE_STATUS]='A' THEN 'ABIERTA' WHEN [ORE_STATUS]='DG' THEN 'DETENIDA X GERENCIA' WHEN [ORE_STATUS]='DR' THEN 'DETENIDA POR REFACC' WHEN [ORE_STATUS]='P' THEN 'EN PROCESO' ELSE 'CERRADA' END,
  5.     [ORE_FECHAORD]
  6. FROM
  7.     [GOMSA356].[dbo].[SER_ORDENDET] A, [GOMSA356].[dbo].[SER_ORDEN] B
  8. WHERE
  9.     A.[ORD_IDORDEN] = [ORE_IDORDEN]
  10.     AND (B.[ORE_STATUS]= 'A'
  11.     OR B.[ORE_STATUS] = 'DG'
  12.     OR B.[ORE_STATUS] = 'DR'
  13.     OR B.[ORE_STATUS] = 'P' OR B.[ORE_STATUS] = 'T')
  14.     AND ORE_FECHAORD LIKE '%/04/2013'
  15.     AND ORD_TIPORDEN IN('H', 'J', 'Q', 'S', 'Z')
  16. ORDER BY [ORD_IDORDEN]

pero lo que queria era contarlos y me quedo así:

Código SQL:
Ver original
  1. SELECT COUNT
  2.      (DISTINCT [ORE_IDORDEN]) AS HYP
  3. FROM
  4.      [GOMSA356].[dbo].[SER_ORDENDET] A,
  5.      [GOMSA356].[dbo].[SER_ORDEN] B
  6. WHERE
  7.      A.[ORD_IDORDEN] = [ORE_IDORDEN]
  8.      AND (B.[ORE_STATUS]= 'A'
  9.      OR B.[ORE_STATUS] = 'DG'
  10.      OR B.[ORE_STATUS] = 'DR'
  11.      OR B.[ORE_STATUS] = 'P'
  12.      OR B.[ORE_STATUS] = 'T')
  13.      AND ORE_FECHAORD LIKE '%/04/2013'
  14.      AND ORD_TIPORDEN IN('H', 'J', 'Q', 'S', 'Z')
  15.     --ORDER BY [ORD_IDORDEN]

Una duda más: mira ya lo pude contar pero de esa consulta quiero me de los conteos de varias casos este seria para HYP pero necesito que en en el mismo conteo me salga 3 tipos y las unicas condiciones son las siguientes

AND ORD_TIPORDEN IN('H', 'J', 'Q', 'S', 'Z') AS HYP
AND ORD_TIPORDEN IN('I', 'E', 'N', 'R', 'T', 'V', 'A') AS MECANICA
AND ORD_TIPORDEN IN('L', 'O', 'X') AS REFACCIONES

No se si se pueda hacer con case o con join, me tendria que dar lo siguiente:

HYP MECANICA REFACCIONES
67 77 45

Última edición por ayhoria; 28/04/2013 a las 15:32

Etiquetas: campo, campos, filas, igual, menos, registro, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:15.