none
Insertar ceros en valores repetidos RRS feed

  • Pregunta

  • Buen dia a todos,

    Tengo una duda espero me puedan ayudar:

    resulta que realizo un query que me trae una columna con la siguiente

    Valor
    20286
    20286
    28434
    28434
    580
    580
    615
    615
    615
    615
    6146
    6146

    Como se puede apreciar se me repite el mismo valor varias veces, la pregunta es como puedo hacer para que si estan repetidos solo me lo ponga una vez y al resto ponerle valor cero, en pocas palabras que me quede asi:

    Valor
    20286
    0
    28434
    0
    580
    0
    615
    0
    0
    0
    6146
    0

    Espero me puedan ayudar, supongo que habra que hacer alguna funcion.

    De antemano gracias.


    A_R_I_E_S

    martes, 2 de junio de 2015 17:29

Respuestas

  • Hola,

    ¿Qué error? Intenta hacer lo siguiente.

    declare @dataOrigen table (num int)
    insert into @dataOrigen values (20286), (20286), (28434), (28434), (580), (580), (615), (615), (615), (615), (6146), (6146);
    
    with CTE (num, orden) as (
    select
    	num,
    	ROW_NUMBER() over (partition by num order by num)	
    from
    	@dataOrigen)
    select	
    	case when orden = 1 then num else 0 end
    from
    	CTE;

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ

    • Marcado como respuesta A_r_i_e_s martes, 2 de junio de 2015 22:45
    martes, 2 de junio de 2015 19:06

Todas las respuestas

  • Hola,

    Intenta ejecutar la siguiente consulta.

    declare @dataOrigen table (num int)
    insert into @dataOrigen values (20286), (20286), (28434), (28434), (580), (580), (615), (615), (615), (615), (6146), (6146);
    
    with CTE (num, orden, orden1) as (
    select
    	num,
    	ROW_NUMBER() over (partition by num order by num)	
    from
    	@dataOrigen)
    select	
    	case when orden = 1 then num else 0 end
    from
    	CTE;

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ

    martes, 2 de junio de 2015 17:41
  • Williams gracias por tu pronta respuesta, me marca el siguiente error:

    [Err] 42000 - [SQL Server]Debe declarar la variable de tabla "@dataOrigen".

    De antemano gracias.


    A_R_I_E_S

    martes, 2 de junio de 2015 18:00
  • Hola,

    Te pase la consulta para que tengas una opción de como resolver el problema. Para que no te marque el error debes de seleccionar toda la consulta y ejecutarla.


    martes, 2 de junio de 2015 18:05
  • si eso hice pero me marca el error:

    corri la consulta asi:

    declare @dataOrigen table (num int)
    insert into @dataOrigen values (20286), (20286), (28434), (28434), (580), (580), (615), (615), (615), (615), (6146), (6146)

    select
    num,
    ROW_NUMBER() over (partition by num order by num)
    from
    @dataOrigen

    y obvio veo la tabla creada pero aun no veo los ceros ya que falta el with

    gracias.



    A_R_I_E_S

    martes, 2 de junio de 2015 18:16
  • ¿Que versión de engine sql server ocupas?¿por qué obviaste WITH?
    martes, 2 de junio de 2015 18:24
  • lo obvie porque me marcaba error, uso sql server 2008

    gracias.


    A_R_I_E_S

    martes, 2 de junio de 2015 18:53
  • Hola,

    ¿Qué error? Intenta hacer lo siguiente.

    declare @dataOrigen table (num int)
    insert into @dataOrigen values (20286), (20286), (28434), (28434), (580), (580), (615), (615), (615), (615), (6146), (6146);
    
    with CTE (num, orden) as (
    select
    	num,
    	ROW_NUMBER() over (partition by num order by num)	
    from
    	@dataOrigen)
    select	
    	case when orden = 1 then num else 0 end
    from
    	CTE;

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ

    • Marcado como respuesta A_r_i_e_s martes, 2 de junio de 2015 22:45
    martes, 2 de junio de 2015 19:06