none
Resultado en un solo Registro. RRS feed

  • Pregunta

  • Buen Dia a todos, tengo la siguiente consulta q hacerles.

    Tengo la sgte. Query

    declare
    @Rut nvarchar(12)
    set @Rut = '81785200-9'
    SELECT  cliente.rut, cliente.razon_social, cliente.nombre_fantasia, 
                  comunicacion.tipo as tipo1, comunicacion.numero as numero1, Direccion.direccion, 
                  Direccion.comuna, Direccion.ciudad
    FROM     cliente INNER JOIN
                  comunicacion ON cliente.codigo_cliente = comunicacion.codigo_cliente INNER JOIN
                     Direccion ON comunicacion.codigo_direccion = Direccion.codigo_direccion
    WHERE     cliente.rut = @Rut

    la cual extrae valores de 3 tablas, me arroja dos registros en el cual todos los datos se repiten excepto tipo y fono q son diferentes.
    Mi pregunta es como hago para q me entregue solo un registro con tipo1, Numero1 y tipo2, numero2

    creo q se puede hacer con una subconsulta, pero nose como hacerlo.

    agradecere cualquier ayuda.

    lunes, 2 de febrero de 2009 16:19

Respuestas

  • Solucionado, gracias qwalgrande por tu respuesta, pero lo hice asi....

    SELECT cliente.rut, cliente.razon_social, cliente.nombre_fantasia,

    Direccion.direccion, Direccion.comuna, Direccion.ciudad,

    (SELECT numero FROM comunicacion

    WHERE (codigo_direccion = dbo.Direccion.codigo_direccion) AND (tipo = 'FAX')) AS FAX,

    (SELECT numero FROM comunicacion AS comunicacion_2

    WHERE (codigo_direccion = dbo.Direccion.codigo_direccion) AND (tipo = 'FONO')) AS FONO

    FROM cliente INNER JOIN

    Direccion ON cliente.codigo_cliente = Direccion.codigo_cliente

    Elimine una relaicon q no era necesaria y se simplifico todo, jejejeje.

    Saludos

    • Marcado como respuesta Netzio lunes, 2 de febrero de 2009 18:27
    lunes, 2 de febrero de 2009 18:25

Todas las respuestas

  • Hola.

    Tienes que agrupar y construir un case, como una forma de pivotar el resultado, aunque debes conocer el valor del tipo. Si sabes que tipo1 = 1 y que tipo2 = 2, sería más o menos así:

    select cliente.rut, tipo1 = 1, numero1 = max(case comunicacion.tipo when 1 then comunicaciones.numero else null end),
    tipo2 = 2, numero2 = max(case comunicacion.tipo when 2 then comunicaciones.numero else null end)
    from ....


    group by cliente.rut --Esto te lo puedes ahorrar, ya que te viene filtrado por un único valor.

    Si no me he explicado, me dices.

    Alberto López Grande.
    lunes, 2 de febrero de 2009 18:19
    Moderador
  • Solucionado, gracias qwalgrande por tu respuesta, pero lo hice asi....

    SELECT cliente.rut, cliente.razon_social, cliente.nombre_fantasia,

    Direccion.direccion, Direccion.comuna, Direccion.ciudad,

    (SELECT numero FROM comunicacion

    WHERE (codigo_direccion = dbo.Direccion.codigo_direccion) AND (tipo = 'FAX')) AS FAX,

    (SELECT numero FROM comunicacion AS comunicacion_2

    WHERE (codigo_direccion = dbo.Direccion.codigo_direccion) AND (tipo = 'FONO')) AS FONO

    FROM cliente INNER JOIN

    Direccion ON cliente.codigo_cliente = Direccion.codigo_cliente

    Elimine una relaicon q no era necesaria y se simplifico todo, jejejeje.

    Saludos

    • Marcado como respuesta Netzio lunes, 2 de febrero de 2009 18:27
    lunes, 2 de febrero de 2009 18:25