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

[SOLUCIONADO] problema para transformar datos con un Case

Estas en el tema de problema para transformar datos con un Case en el foro de SQL Server en Foros del Web. hola amigos, tengo el siguiente problema, necesito transformar un campo, tiene guiones y yo lo necesito sin guiones, hasta aqui ya lo resolvi, el problema ...
  #1 (permalink)  
Antiguo 31/03/2015, 12:59
Avatar de rachpts  
Fecha de Ingreso: febrero-2012
Mensajes: 117
Antigüedad: 12 años, 8 meses
Puntos: 0
Pregunta problema para transformar datos con un Case

hola amigos, tengo el siguiente problema, necesito transformar un campo, tiene guiones y yo lo necesito sin guiones, hasta aqui ya lo resolvi, el problema es que tengo registros que van sin guion y esos necesito su valor como esta, les pongo un ejemplo

customer2...................... (No column name)
VIVO - MG .......................VIVO
VIVO - NORTE/NBT...........VIVO
VIVO - NORTE/NBT........... VIVO
VIVO - SPC.......................VIVO
VIVO - SPI........................VIVO
VIVO .............................
VIVO --------------------------------------- en casos como este viene el problema ya que si no tiene el guion me lo trae vacío,

aqui dejo mi consulta que tengo
Código SQL:
Ver original
  1. SELECT ltrim (rtrim(SUBSTRING([customer2],0,charindex('-',[customer2]))))
  2.  FROM [RIA].[dbo].[TestRachel] WHERE [USER]='146_250_105_147'


por favor alguien que me pueda ayudar a resolver mi problema, como podría usar el case en este caso?
  #2 (permalink)  
Antiguo 31/03/2015, 13:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: problema para transformar datos con un Case

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. valor VARCHAR(20)
  4. )
  5.  
  6. INSERT INTO #temp VALUES ('AA-S1')
  7. INSERT INTO #temp VALUES ('AA-S2')
  8. INSERT INTO #temp VALUES ('AA*********')
  9.  
  10.  
  11. SELECT CASE WHEN charindex('-',valor)>=1 THEN REPLACE(valor,'-','') ELSE valor END AS campo FROM #temp

Resultado:

campo
AAS1
AAS2
AA*********
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 31/03/2015, 13:20
Avatar de rachpts  
Fecha de Ingreso: febrero-2012
Mensajes: 117
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: problema para transformar datos con un Case

hola, muchas gracias por contestar, creo que tal vez no me di a entender, sucede que el problema no es tanto el guion si no que me los toma como si fueran campos distintos y en realidad no, aunque tengan ejemplo VIVO- MG se tendria que referir a un campo en comun que es VIVO nada mas, hasta aqui todo va bien, pero con los que no tienen nada de guion no los puedo retomar porq me aparece vacio como lo mostré anteriormente
  #4 (permalink)  
Antiguo 31/03/2015, 13:28
Avatar de rachpts  
Fecha de Ingreso: febrero-2012
Mensajes: 117
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: problema para transformar datos con un Case

muchas gracias, ya lo logre lo posteo
Código MySQL:
Ver original
  1. SELECT[customer2], CASE WHEN charindex('-',[customer2])=0
  2. then ([customer2]) else
  3.  ltrim (rtrim(substring([customer2],0,charindex('-',[customer2])))) end
  4.  from [RIA].[dbo].[TestRachel] where [user]='146_250_105_147'

ya no me trae vacio datos vacios
  #5 (permalink)  
Antiguo 31/03/2015, 13:32
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: problema para transformar datos con un Case

Primero dices que no sirve lo que te pase que quieres algo distinto, y al final haces lo que te recomende......claro acomodandolo a lo que necesitas........
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: case, registros, select, siguiente, transformar
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 08:59.