2017-02-27 11 views
0

5つのテーブルの結果を1つの値にリンクするクエリを作成していますが、結果が5つの異なるカラムを与えるため、必要な結果が得られません(CodigoProyecto )、私は一つだけ、クエリでこれらをリンクする必要があります:私はよく自分自身を説明するために管理している場合同じ列の5つの異なるテーブルにリンクする

SELECT  TES_CarteraPrevisiones.CodigoEmpresa, TES_CarteraPrevisiones.IdDelegacion, TES_CarteraPrevisiones.IdPrevision, TES_CarteraPrevisiones.CodigoTipoPrevision, 
         TES_CarteraPrevisiones.TipoPrevision, TES_CarteraPrevisiones.EjercicioDocumento, TES_CarteraPrevisiones.SerieDocumento, 
         TES_CarteraPrevisiones.NumeroDocumento, TES_CarteraPrevisiones.FechaDocumento, TES_CarteraPrevisiones.NumeroOrdenEfecto, 
         TES_CarteraPrevisiones.Comentario, TES_CarteraPrevisiones.CodigoClienteProveedor, TES_CarteraPrevisiones.CodigoCuenta, 
         TES_CarteraPrevisiones.Contrapartida, TES_CarteraPrevisiones.CodigoCanal, TES_CarteraPrevisiones.CodigoTipoEfecto, TES_CarteraPrevisiones.ClaseEfecto, 
         TES_CarteraPrevisiones.FechaOperacion, TES_CarteraPrevisiones.FechaValor, TES_CarteraPrevisiones.ImporteEfecto, TES_CarteraPrevisiones.Bloqueo, 
         TES_CarteraPrevisiones.MovPosicionOrigen, TES_CarteraPrevisiones.FechaProceso, TES_CarteraPrevisiones.UsuarioProceso, TES_CarteraPrevisiones.Prevision, 
         TES_CarteraPrevisiones.TipoEfecto, TES_CarteraPrevisiones.Comentarios, 
         CASE WHEN TES_CarteraPrevisiones.Prevision = 'C' THEN Clientes.Razonsocial ELSE Proveedores.RazonSocial END AS RazonSocial, 
         CASE WHEN TES_CarteraPrevisiones.Prevision = 'C' THEN TES_CarteraPrevisiones.ImporteEfecto ELSE 0.00 END AS ImporteCobros, 
         CASE WHEN TES_CarteraPrevisiones.Prevision = 'P' THEN TES_CarteraPrevisiones.ImporteEfecto ELSE 0.00 END AS ImportePagos, 
         CASE WHEN TES_CarteraPrevisiones.CodigoTipoPrevision = 1 THEN ResumenCliente.CodigoProyecto ELSE NULL END AS CodigoProyecto, 
         CASE WHEN TES_CarteraPrevisiones.CodigoTipoPrevision = 2 THEN ResumenProveedor.CodigoProyecto ELSE NULL END AS CodigoProyecto, 
         CASE WHEN TES_CarteraPrevisiones.CodigoTipoPrevision = 9 THEN TES_Presupuestos.Comentario ELSE NULL END AS CodigoProyecto, 
         CASE WHEN TES_CarteraPrevisiones.CodigoTipoPrevision = 11 THEN CabeceraPedidoCliente.CodigoProyecto ELSE NULL END AS CodigoProyecto, 
         CASE WHEN TES_CarteraPrevisiones.CodigoTipoPrevision = 12 THEN CabeceraPedidoProveedor.CodigoProyecto ELSE NULL END AS CodigoProyecto 
FROM   TES_CarteraPrevisiones LEFT OUTER JOIN 
         Proveedores ON TES_CarteraPrevisiones.CodigoEmpresa = Proveedores.CodigoEmpresa AND 
         TES_CarteraPrevisiones.CodigoClienteProveedor = Proveedores.CodigoProveedor AND TES_CarteraPrevisiones.Prevision = 'P' LEFT OUTER JOIN 
         Clientes ON TES_CarteraPrevisiones.CodigoEmpresa = Clientes.CodigoEmpresa AND TES_CarteraPrevisiones.CodigoClienteProveedor = Clientes.CodigoCliente AND 
         TES_CarteraPrevisiones.Prevision = 'C' 
         LEFT OUTER JOIN ResumenCliente on ResumenCliente.CodigoEmpresa=TES_CarteraPrevisiones.CodigoEmpresa 
and ResumenCliente.EjercicioFactura=TES_CarteraPrevisiones.EjercicioDocumento 
and ResumenCliente.SerieFactura=TES_CarteraPrevisiones.SerieDocumento 
and ResumenCliente.NumeroFactura=TES_CarteraPrevisiones.NumeroDocumento 

LEFT OUTER JOIN ResumenProveedor on ResumenProveedor.CodigoEmpresa=TES_CarteraPrevisiones.CodigoEmpresa 
and ResumenProveedor.EjercicioFactura=TES_CarteraPrevisiones.EjercicioDocumento 
and ResumenProveedor.SerieFactura=TES_CarteraPrevisiones.SerieDocumento 
and ResumenProveedor.NumeroFactura=TES_CarteraPrevisiones.NumeroDocumento 

LEFT OUTER JOIN TES_Presupuestos on TES_Presupuestos.CodigoEmpresa=TES_CarteraPrevisiones.CodigoEmpresa 
and TES_Presupuestos.EjercicioPresupuesto=TES_CarteraPrevisiones.EjercicioDocumento 
and TES_Presupuestos.SeriePresupuesto=TES_CarteraPrevisiones.SerieDocumento 
and TES_Presupuestos.NumeroPresupuesto=TES_CarteraPrevisiones.NumeroDocumento 

LEFT OUTER JOIN CabeceraPedidoCliente on CabeceraPedidoCliente.CodigoEmpresa=TES_CarteraPrevisiones.CodigoEmpresa 
and CabeceraPedidoCliente.EjercicioPedido=TES_CarteraPrevisiones.EjercicioDocumento 
and CabeceraPedidoCliente.SeriePedido=TES_CarteraPrevisiones.SerieDocumento 
and CabeceraPedidoCliente.NumeroPedido=TES_CarteraPrevisiones.NumeroDocumento 

LEFT OUTER JOIN CabeceraPedidoProveedor on CabeceraPedidoProveedor.CodigoEmpresa=TES_CarteraPrevisiones.CodigoEmpresa 
and CabeceraPedidoProveedor.EjercicioPedido=TES_CarteraPrevisiones.EjercicioDocumento 
and CabeceraPedidoProveedor.SeriePedido=TES_CarteraPrevisiones.SerieDocumento 
and CabeceraPedidoProveedor.NumeroPedido=TES_CarteraPrevisiones.NumeroDocumento 

ORDER BY CodigoProyecto, TES_CarteraPrevisiones.TipoPrevision, TES_CarteraPrevisiones.EjercicioDocumento, TES_CarteraPrevisiones.SerieDocumento, TES_CarteraPrevisiones.NumeroDocumento, TES_CarteraPrevisiones.CodigoClienteProveedor 

は、私にはわからない...あなたの助けを

感謝を!

+5

問題を最小限に抑えます。 2つまたは3つのテーブル、より少ない列、より短い名前。 – jarlh

答えて

1

case文に複数の項目を含めることができます。必要に応じてWHEN句を追加できます。

CASE 
    WHEN TES_CarteraPrevisiones.CodigoTipoPrevision = 1 THEN ResumenCliente.CodigoProyecto 
    WHEN TES_CarteraPrevisiones.CodigoTipoPrevision = 2 THEN ResumenProveedor.CodigoProyecto 
    WHEN TES_CarteraPrevisiones.CodigoTipoPrevision = 9 THEN TES_Presupuestos.Comentario 
    WHEN TES_CarteraPrevisiones.CodigoTipoPrevision = 11 THEN CabeceraPedidoCliente.CodigoProyecto 
    WHEN TES_CarteraPrevisiones.CodigoTipoPrevision = 12 THEN CabeceraPedidoProveedor.CodigoProyecto 
    ELSE NULL 
END AS CodigoProyecto 
+1

なぜ 'case'式を' case TES_CarteraPrevisiones.CodigoTipoPrevision when 1 then ... then 2 then ... end'と単純化してタイピングを保存してみませんか? – jarlh

+0

@jarlh - 私は入力が保守性よりも重要ではないと私は思っています。 – Hogan

関連する問題