Consulta Maestro detalle

14/01/2008 - 21:34 por ryuyi | Informe spam
Tengo un problema tengo los siguientes datos como por ejemplo
Tabla Encabezado
Factura Nombre Telefono
100 Jose Flores 3245455
Tabla Detalle
Factura Var1 Total1 Var2 Total2 Var3 Total3
100 I 10 X 12 Z 16

Si hago una relacion de datos seria asi
SELECT e.Factura,Nombre,Telefono,
Var1,Total1,Var2,Total2,Var3,Total3
FROM encabezado e, detalle d
WHERE e.Factura=d.Factura

AL hacer esto me mostraria de la siguiente forma

Factura Nombre Telefono Var1 Total1 Var2 Total2 Var3
Total3
100 Jose Flores 3245455 I 10 X 12
Z 16

Pero me gustaria que me muestre de la siguiente manera, alguna idea de como
hacer una consulta que me muestre de la siguiente forma. gracias

Factura Nombre Telefono Varx Totalx
100 Jose Flores 3245455 I 10
X 12
Z 16
 

Leer las respuestas

#1 Alejandro Mesa
15/01/2008 - 02:37 | Informe spam
ryuyi,

Debes normalizar la tabla de detalle.

declare @Encabezado TABLE (
Factura VARCHAR(15) NOT NULL,
Nombre VARCHAR(50),
Telefono CHAR(7)
)

DECLARE @Detalle TABLE (
Factura VARCHAR(15) NOT NULL,
Var1 CHAR(1),
Total1 INT,
Var2 CHAR(1),
Total2 INT,
Var3 CHAR(1),
Total3 INT
)

INSERT INTO @Encabezado VALUES(100, 'Jose Flores', '3245455')
INSERT INTO @Detalle VALUES(100, 'I', 10, 'X', 12, 'Z', 16)

SELECT
e.Factura,
e.Nombre,
e.Telefono,
t2.Varx,
t2.Totalx
FROM
@Encabezado AS e
INNER JOIN
(
SELECT
d.Factura,
CASE t1.c1
WHEN 1 THEN Var1
WHEN 2 THEN Var2
WHEN 3 THEN Var3
END AS Varx,
CASE t1.c1
WHEN 1 THEN Total1
WHEN 2 THEN Total2
WHEN 3 THEN Total3
END AS Totalx
FROM
@Detalle AS d
CROSS JOIN
(
SELECT 1 AS c1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
) AS t1
) AS t2
ON e.Factura = t2.Factura

;WITH unpvt_var
AS
(
SELECT
Factura,
Varx,
CASE [Var]
WHEN 'Var1' THEN 1
WHEN 'Var2' THEN 2
WHEN 'Var3' THEN 3
END AS position
FROM
@Detalle
UNPIVOT
(
[Varx]
FOR [Var] IN (Var1, Var2, Var3)
) AS unpvt
),
unpvt_total
AS
(
SELECT
Factura,
Totalx,
CASE [Total]
WHEN 'Total1' THEN 1
WHEN 'Total2' THEN 2
WHEN 'Total3' THEN 3
END AS position
FROM
@Detalle
UNPIVOT
(
[Totalx]
FOR [Total] IN (Total1, Total2, Total3)
) AS unpvt
)
SELECT
e.Factura,
e.Nombre,
e.Telefono,
t1.Varx,
t2.Totalx
FROM
@Encabezado AS e
INNER JOIN
unpvt_var AS t1
ON e.Factura = t1.Factura
INNER JOIN
unpvt_total AS t2
ON t2.Factura = t1.Factura
AND t2.position = t1.position
GO


AMB


"ryuyi" wrote:

Tengo un problema tengo los siguientes datos como por ejemplo
Tabla Encabezado
Factura Nombre Telefono
100 Jose Flores 3245455
Tabla Detalle
Factura Var1 Total1 Var2 Total2 Var3 Total3
100 I 10 X 12 Z 16

Si hago una relacion de datos seria asi
SELECT e.Factura,Nombre,Telefono,
Var1,Total1,Var2,Total2,Var3,Total3
FROM encabezado e, detalle d
WHERE e.Factura=d.Factura

AL hacer esto me mostraria de la siguiente forma

Factura Nombre Telefono Var1 Total1 Var2 Total2 Var3
Total3
100 Jose Flores 3245455 I 10 X 12
Z 16

Pero me gustaria que me muestre de la siguiente manera, alguna idea de como
hacer una consulta que me muestre de la siguiente forma. gracias

Factura Nombre Telefono Varx Totalx
100 Jose Flores 3245455 I 10
X 12
Z 16

Preguntas similares