none
SUMAR 2 COLUMNAS EN UNA SOLA CON 3 RELACIONES RRS feed

  • Pregunta


  • En general, asi es como tengo mi tabla de hechos, lo que busco es conseguir hacer la segunda tabla

    donde tengo a todos los clientes ya sea que estén comprando o vendiendo y representar la suma de sus comisiones.

    Aquí lo que es difícil para mi es que la comisión no está en una sola columna, ni tampoco el cliente, les marco el ejemplo del cliente SANTANDER para que se vea más claro

    les muestro como tengo mi arreglo:

    la tabla de hechos está 3 veces relacionada con la de clientes (COMPRADOR, VENDEDOR y BANCO DE TRABAJO)

    Cuando yo quiero hacer la suma, solo me entra la suma del RELATIONSHIP activa que es el COMPRADOR,

    Les dejo el script que construye esta base de datos ejemplo, ojalá me pudieran apoyar

    tks

    USE master;
    GO
    -- =======================================================================================================
    -- AUTOR:			MANUEL OMAR OLGUÍN HDEZ
    -- FECHA:			2016 - 01 - 13
    -- VERSIÓN SCRIPT:	1.0
    -- REQUERIMIENTO:	ASESORÍA
    -- DESCRIPCIÓN:		CREA UNA BASE DE DATOS DE TIPO DATA WAREHOUSE PARA UTILIZARLA COMO EJEMPLO Y
    --					SOLICITAR ASESORÍA VÍA FOROS
    --
    -- NOTA:			CÓDIGO CREADO EN SQL SERVER 2014 DEVELOPER EDITION
    -- =======================================================================================================
    
    
    
    ------------------------------------------------------------------------------- CREA BASE DE DATOS
    IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'DW_temp') 	
    		CREATE DATABASE DW_temp;
    GO
    
    USE DW_temp;
    GO
    
    ------------------------------------------------------------------------------ CREA LA ESTRUCTURA 
    
    
    IF OBJECT_ID ('FactDeals')		IS NOT NULL DROP TABLE FactDeals;
    IF OBJECT_ID ('DimClientes')	IS NOT NULL DROP TABLE DimClientes;
    IF OBJECT_ID ('DimProductos')	IS NOT NULL DROP TABLE DimProductos;
    IF OBJECT_ID ('DimContactos')	IS NOT NULL DROP TABLE DimContactos;
    IF OBJECT_ID ('DimDivisas')		IS NOT NULL DROP TABLE DimDivisas;
    IF OBJECT_ID ('DimFechas')		IS NOT NULL DROP TABLE DimFechas;
    IF OBJECT_ID ('v_Deals')		IS NOT NULL DROP  VIEW  V_Deals;
    
    
    
    
    CREATE TABLE DimClientes
      (
         IdCliente		TINYINT			NOT NULL,
    	 NombreCliente	VARCHAR (30)	NOT NULL,
    	 RazonSocial	VARCHAR (100)	NOT NULL,
    	 CONSTRAINT		PK_DimClientes	PRIMARY KEY (IdCliente),
      );
    
       
       
    CREATE TABLE DimContactos
     (
      IdContacto		TINYINT	NOT NULL,
      NombreContacto	VARCHAR (30),
      CONSTRAINT		PK_DimContactos	PRIMARY KEY (IdContacto),
     )
    
    
     
    CREATE TABLE DimProductos
     (
      IdProducto		TINYINT	NOT NULL,
      Mercado			VARCHAR (30) NOT NULL,
      NombreProducto	VARCHAR (30),
      CONSTRAINT		PK_DimProductos	PRIMARY KEY (IdProducto),
     )
    
    
     
     
    CREATE TABLE DimDivisas
     (
      IdDivisa			TINYINT	NOT NULL,
      Divisa			VARCHAR (3) NOT NULL,
      CONSTRAINT		PK_DimDivisas	PRIMARY KEY (IdDivisa),
     )
    
     
     
    CREATE TABLE DimFechas
     (
      Fecha			DATE			NOT NULL,
      Año			SMALLINT		NOT NULL,
      NombreMes		VARCHAR (20)	NOT NULL,
      Día			TINYINT			NOT NULL,
      OrderKeyMes	TINYINT			NOT NULL,
      CONSTRAINT	PK_DimFechas	PRIMARY KEY (Fecha),
     )
    
    
    
    CREATE TABLE FactDeals
     (
       IdDeal					INT						NOT NULL,
       Fecha					DATE					NOT NULL,
       IdCliente_Comprador		TINYINT					NOT NULL,
       IdCliente_Vendedor		TINYINT					NOT NULL,
       IdCliente_BT				TINYINT					NULL,
       IdDivisa					TINYINT					NOT NULL,
       IdProducto				TINYINT					NOT NULL,
       Monto					DECIMAL (18,0)			NOT NULL,
       Tasa						DECIMAL (10,8)			NOT NULL,
       TipoCambio				DECIMAL (10,8)			NOT NULL,
       Comision_Comprador		DECIMAL (10,2)			NOT NULL,
       Comision_Vendedor		DECIMAL (10,2)			NOT NULL,
       IdContacto_Comprador		TINYINT					NOT NULL,
       IdContacto_Vendedor		TINYINT					NOT NULL,
       Factor					DECIMAL (5,4)			NULL,
       CONSTRAINT				PK_FactDeals			PRIMARY KEY (IdDeal),
       CONSTRAINT				FK_Cliente_Comprador	FOREIGN KEY (IdCliente_Comprador)	REFERENCES DimClientes (IdCliente),
       CONSTRAINT				FK_Cliente_Vendedor		FOREIGN KEY (IdCliente_Vendedor)	REFERENCES DimClientes (IdCliente),
       CONSTRAINT				FK_Cliente_BT			FOREIGN KEY (IdCliente_BT)			REFERENCES DimClientes (IdCliente),
       CONSTRAINT				FK_Producto				FOREIGN KEY (IdProducto)			REFERENCES DimProductos (IdProducto),
       CONSTRAINT				FK_IdContacto_Comprador	FOREIGN KEY (IdContacto_Comprador)	REFERENCES DimContactos (IdContacto),
       CONSTRAINT				FK_IdContacto_Vendedor	FOREIGN KEY (IdContacto_Vendedor)	REFERENCES DimContactos (IdContacto),
       CONSTRAINT				FK_Fecha				FOREIGN KEY (Fecha)					REFERENCES DimFechas    (Fecha),
       CONSTRAINT				FK_Divisas				FOREIGN KEY (IdDivisa)				REFERENCES DimDivisas	(IdDivisa),
      );
      GO
    
    
    
    
    
     -- CREAR VISTA PARA VISUALIZAR LOS HECHOS
     CREATE VIEW V_Deals
     AS
     SELECT		A.IdDeal, A.Fecha 
    			,G.NombreProducto
    			,MXN_Monto = CONVERT(DECIMAL(18,2), CASE WHEN A.IdDivisa = 1 THEN A.Monto ELSE A.Monto * A.TipoCambio END)
    			,USD_Monto = CONVERT(DECIMAL (18,2), CASE WHEN A.IdDivisa = 2 THEN A.Monto ELSE A.Monto / A.TipoCambio END)
    			,A.Tasa
    			,H.Divisa
    			,B.NombreCliente AS Cliente_Comprador, C.NombreCliente AS Cliente_Vendedor
    			,F.NombreCliente AS Cliente_BT, D.NombreContacto as Contacto_Comprador, E.NombreContacto as Contacto_Vendedor
    			,A.Comision_Comprador, A.Comision_Vendedor
    			,G.[Mercado]			
    			,B.[RazonSocial] as RazonSocialComprador
    			,C.RazonSocial as RazonSocialVendedor
    			,A.Factor
     FROM		FactDeals		AS A
     INNER JOIN	DimClientes		AS B ON A.IdCliente_Comprador	= B.IdCliente
     INNER JOIN	DimClientes		AS C ON A.IdCliente_Vendedor	= C.IdCliente
     INNER JOIN	DimContactos	AS D ON A.IdContacto_Comprador	= D.IdContacto
     INNER JOIN DimContactos	AS E ON A.IdContacto_Vendedor	= E.IdContacto
     LEFT JOIN	DimClientes		AS F ON A.IdCliente_BT			= F.IdCliente
     INNER JOIN DimProductos	AS G ON A.IdProducto			= G.IdProducto
     INNER JOIN	DimDivisas		AS H ON A.IdDivisa				= H.IdDivisa
     GO
    
     --------------------------------------------------------------------- LLENA LOS DATOS
    
     INSERT INTO DimClientes VALUES
     (1,'HSBC','BANCO HSBC DE MÉXICO'),
     (2,'SANTANDER','GRUPO SANTANDER DE MÉXICO'),
     (3,'BANCOMER','BANCOMER SA DE C.V'),
     (4,'JP MORGAN LDN','JPM INTERNATIONAL ...'),
     (5,'BARCLAYS','PLC BARCLAYS NY'),
     (6,'VECTOR','BANCO VECTOR S.A, DE C.V'),
     (7,'BANAMEX','BANCO NACIONAL DE MÉXICO GRUPO FINANCIERO S.A DE C.V'),
     (8,'JP MORGAN NY','JPM INTERNATIONAL ...');
    
     INSERT INTO DimContactos VALUES
     (1,'Roberto Garza'),
     (2,'Daniel Barrios'),
     (3,'Juan Huerta'),
     (4,'Luis Estrada'),
     (5,'Gerardo Vargas'),
     (6,'Leonardo Moreno'),
     (7,'Ernesto Cabrera'),
     (8,'Manuel Hernández');
    
    
      INSERT INTO DimProductos VALUES
      (1, 'MONEY MARKET', 'FIJA'),
      (2, 'MONEY MARKET', 'CETE'),
      (3, 'MONEY MARKET', 'UDIBONO'),
      (4, 'MONEY MARKET', 'BANCARIO'),
      (5, 'MONEY MARKET', 'CORPORATIVO'),
      (6, 'MONEY MARKET', 'IPABONO'),
      (7, 'DERIVATIVES', 'IRS'),
      (8, 'DERIVATIVES', 'FWD')
    
    
      INSERT INTO DimFechas
      SELECT '2015-12-28','2015','DICIEMBRE','28'	,12	UNION ALL
      SELECT '2016-01-14','2016','ENERO','14'		,1	UNION ALL
      SELECT '2016-02-15','2016','FEBRERO','15'		,2	UNION ALL
      SELECT '2016-02-16','2016','FEBRERO','16'		,2	
    
      INSERT INTO DimDivisas VALUES
      (1,'MXN'),
      (2,'USD');
    
    
     INSERT INTO FactDeals VALUES
     (1,'2015-12-28',	5,2,null,		1,	1,	1000000,6.25,	13.25,	3500,	4500,	4,5,	5.5411),
     (2,'2015-12-28',	5,1,null,		1,	1,	2000000,6.26,	13.36,	4500,	4000,	4,6,	5.5412),
     (3,'2015-12-28',	2,3,null,		1,	2,	1000000,6.35,	16.98,	3000,	2805,	5,1,	5.5517),
     (4,'2016-02-15',	4,6,1,			1,	3,	1000000,6.788,	14.35,	3800,	8005,	2,3,	5.5919),
     (5,'2016-02-15',	4,1,5,			1,	4,	1000000,6.788,	17.99,	3800,	8005,	2,6,	5.8902),
     (6,'2016-01-14',	6,2,7,			1,	6,	5000000,6.39,	17.899,	5500,	3000,	3,5,	5.2344),
     (7,'2016-01-14',	1,4,NULL,		2,	7,	4500,	17.39,	19.85,	300,	400,	6,2,	NULL),
     (8,'2016-02-16',	1,8,NULL,		2,	7,	4000,	17.00,	18.63,	5,		0,		6,2,	NULL),
     (9,'2016-02-16',	1,8,7,			2,	8,	1000,	17.54,	19.02,	10,		20,		7,2,	NULL),
     (10,'2016-02-16',	1,5,null,		2,	8,	1000,	17.01,	17.45,	55,		35,		7,8,	NULL),
     (11,'2016-02-16',	1,5,null,		2,	8,	1000,	17.99,	19.25,	20,		15,		7,8,	NULL),
     (12,'2016-01-14',	2,6,7,			1,	5,	5000000,6.39,	17.899,	5500,	3000,	5,3,	5.6411);
    
     ------------------------------------------------------------------------- VER LOS REGISTROS INSERTADOS
    
     SELECT * FROM V_Deals ORDER BY IdDeal
    
    
    
    Nadie quien me ayude?


    saludos


    • Editado kakaroto2012 martes, 6 de septiembre de 2016 20:13
    viernes, 2 de septiembre de 2016 12:59