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

combinar 2 columnas

Estas en el tema de combinar 2 columnas en el foro de SQL Server en Foros del Web. Hola a tod@s, tengo 1 tabla con los campos : nombre, telefono1, telefono2, movil y quiero obtener el nº de móvil, el problema es que ...
  #1 (permalink)  
Antiguo 30/05/2007, 05:02
Avatar de Expinete  
Fecha de Ingreso: abril-2006
Ubicación: Zaragoza
Mensajes: 236
Antigüedad: 18 años, 1 mes
Puntos: 3
combinar 2 columnas

Hola a tod@s, tengo 1 tabla con los campos :
nombre, telefono1, telefono2, movil
y quiero obtener el nº de móvil, el problema es que en el campo telefono2 han introducido móviles:
Código PHP:
nombre       telefono1         telefono2         movil
-------       ----------       ----------        ----------
juan           978456123       956945632       699256897
felipe         956321654        685212336  
maria         952368741 
así que tengo que hacer una consulta que me devuelva la combinación de los campos telefono2 y móvil para obtener todos los móviles...
Si alguien sabe como resolverlo le estaria muy agradecido.
  #2 (permalink)  
Antiguo 30/05/2007, 07:43
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: combinar 2 columnas

concatenandolos
Código:
   Select telefono2 + ', ' +  movil as Movil
   from MiTabla
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 30/05/2007, 08:24
Avatar de Expinete  
Fecha de Ingreso: abril-2006
Ubicación: Zaragoza
Mensajes: 236
Antigüedad: 18 años, 1 mes
Puntos: 3
Re: combinar 2 columnas

es una solución, pero no es esa la que busco, lo que quiero es obtener únicamente los móviles sin otro dato, de todas formas muchas gracias Andres, seguiré mirando la forma de conseguirlo
Lo que quiero obtener si tengo lo siguiente

Código PHP:
nombre       telefono1         telefono2         movil
-------       ----------       ----------        ----------
juan           978456123       956945632       699256897
felipe         956321654        685212336  
maria         652368741 
sería
Código PHP:
nombre           movil
-------       ----------      
juan           699256897
felipe         685212336  
maria         652368741 

Última edición por Expinete; 30/05/2007 a las 08:30
  #4 (permalink)  
Antiguo 30/05/2007, 08:42
Avatar de Expinete  
Fecha de Ingreso: abril-2006
Ubicación: Zaragoza
Mensajes: 236
Antigüedad: 18 años, 1 mes
Puntos: 3
Re: combinar 2 columnas

Bueno he conseguido lo que quería ahora el problema es que me pueden salir dos registros de la misma persona que tenga 2 móviles, la sentencia es la siguiente:
Código PHP:
SELECT NombreTelefono1
FROM Tabla
WHERE  telefono1 LIKE 
'6%' 
UNION
SELECT Nombre
Telefono2
FROM Tabla
WHERE telefono2 LIKE 
'6%' 
UNION
SELECT Nombre
movil
FROM Tabla
WHERE movil like 
'6%' 
pero si una persona tiene dos moviles saldria asi:
Código PHP:
nombre    telefono1
-------    ---------
Juan       666555444
Juan       645789123 
y sólo quiero que me aparezca 1
  #5 (permalink)  
Antiguo 30/05/2007, 08:43
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: combinar 2 columnas

ah ok, dejame ver si entendi...
lo que quieres es obtener el campo movil, pero en ocasiones viene nulo o vacio y si pasa eso, se debe tomar el campo telefono2.
igualmente si viene vacio o nulo, se tomaria el valor del telefono1.

Es asi?
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #6 (permalink)  
Antiguo 30/05/2007, 08:46
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: combinar 2 columnas

El 6 al inicio te indica que es un telefono movil??


Cita:
Iniciado por Expinete Ver Mensaje
Bueno he conseguido lo que quería ahora el problema es que me pueden salir dos registros de la misma persona que tenga 2 móviles, la sentencia es la siguiente:
Código PHP:
SELECT NombreTelefono1
FROM Tabla
WHERE  telefono1 LIKE 
'6%' 
UNION
SELECT Nombre
Telefono2
FROM Tabla
WHERE telefono2 LIKE 
'6%' 
UNION
SELECT Nombre
movil
FROM Tabla
WHERE movil like 
'6%' 
pero si una persona tiene dos moviles saldria asi:
Código PHP:
nombre    telefono1
-------    ---------
Juan       666555444
Juan       645789123 
y sólo quiero que me aparezca 1
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #7 (permalink)  
Antiguo 30/05/2007, 08:51
Avatar de Expinete  
Fecha de Ingreso: abril-2006
Ubicación: Zaragoza
Mensajes: 236
Antigüedad: 18 años, 1 mes
Puntos: 3
Re: combinar 2 columnas

si, asi es en España los número de móvil empiezan por el 6
  #8 (permalink)  
Antiguo 30/05/2007, 09:02
Avatar de Expinete  
Fecha de Ingreso: abril-2006
Ubicación: Zaragoza
Mensajes: 236
Antigüedad: 18 años, 1 mes
Puntos: 3
Re: combinar 2 columnas

YA está solucuionado
Código PHP:
SELECT NombreTelefono1
FROM Tabla
WHERE  telefono1 LIKE 
'6%' and telefono2 not LIKE '6%' 
UNION
SELECT Nombre
Telefono2
FROM Tabla
WHERE telefono2 LIKE 
'6%' and movil not like '6%'
UNION
SELECT Nombre
movil
FROM Tabla
WHERE movil like 
'6%' 
Muchas gracias por todo Andres, al final lo consegui
  #9 (permalink)  
Antiguo 30/05/2007, 09:06
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: combinar 2 columnas

Ok, aunque se puede hacer en una sola sentencia select, creo que creando una funcion queda el codigo mas sencillo.

Código:
SELECT Nombre, dbo.ShowMovil(movil ,Telefono1 , Telefono2 ) as strMovil
From Tabla (nolock)
Where  len(strMovil) > 0
Código:
-- =============================================
-- Create scalar function (FN)
-- =============================================
IF EXISTS (SELECT * 
	   FROM   sysobjects 
	   WHERE  name = N'[dbo].[ShowMovil]')
	DROP FUNCTION [dbo].[ShowMovil]
GO

CREATE FUNCTION dbo.ShowMovil 
	(@Telefono1 varchar(20), 
	 @Telefono2 varchar(20),
    @Telefono3 varchar(20))
RETURNS varchar(20)
AS
BEGIN
    Declare @MovilResult varchar(20)
    Set @MovilResult = ''

    If len(isnull(@Telefono1,'')) > 0
    Begin
         If left(ltrim(@Telefono1), 1) = '6'
         Begin
             return  @Telefono1
         End
    End

    If len(isnull(@Telefono2,'')) > 0
    Begin
         If left(ltrim(@Telefono2), 1) = '6'
         Begin
             return  @Telefono2
         End
    End


    If len(isnull(@Telefono3,'')) > 0
    Begin
         If left(ltrim(@Telefono3), 1) = '6'
         Begin
             return  @Telefono3
         End
    End

    return @MovilResult
END
GO

-- =============================================
-- Example to execute function
-- =============================================
SELECT dbo.ShowMovil('999256897','656945632', '678456123')

GO
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #10 (permalink)  
Antiguo 30/05/2007, 09:07
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: combinar 2 columnas

Ok, solo que con esta consulta, lees tres veces la misma tabla...sin mencionar el uso de la sentencia Like.

Que te parece utilizar la funcion escalar que te comentaba?


Cita:
Iniciado por Expinete Ver Mensaje
YA está solucuionado
Código PHP:
SELECT NombreTelefono1
FROM Tabla
WHERE  telefono1 LIKE 
'6%' and telefono2 not LIKE '6%' 
UNION
SELECT Nombre
Telefono2
FROM Tabla
WHERE telefono2 LIKE 
'6%' and movil not like '6%'
UNION
SELECT Nombre
movil
FROM Tabla
WHERE movil like 
'6%' 
Muchas gracias por todo Andres, al final lo consegui
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 30/05/2007 a las 09:23
  #11 (permalink)  
Antiguo 30/05/2007, 10:00
Avatar de Expinete  
Fecha de Ingreso: abril-2006
Ubicación: Zaragoza
Mensajes: 236
Antigüedad: 18 años, 1 mes
Puntos: 3
Re: combinar 2 columnas

al final voy a tener que aprender de una vez por todas a hacer ese tipo de funciones porque si no voy a salir mu mal con estas cosillas .

Hay tanto que aprender y tan poco tiempo
  #12 (permalink)  
Antiguo 08/06/2007, 03:53
Avatar de Expinete  
Fecha de Ingreso: abril-2006
Ubicación: Zaragoza
Mensajes: 236
Antigüedad: 18 años, 1 mes
Puntos: 3
Re: combinar 2 columnas

Por cierto Andres95, he estado empleando tu función y me dice que el nombre de columna strmovil no es válido sabes a que puede ser debido?
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 13:56.