-- CREATE TABLAS --tabla cliente CREATE TABLE cliente( id_cliente int not null primary key, nombres varchar(20), )
CREATE TABLE venta( id_venta int not null primary key, fecha datetime, id_cliente int not null foreign key references cliente(id_cliente), )
CREATE TABLE detalle_venta( id_detalle int not null primary key, producto varchar(20), cantidad int, precio smallmoney, id_venta int not null foreign key references venta(id_venta), )
--Insertando datos a tablas --Tabla cliente INSERT INTO cliente values (1,'Hernan Nina'); INSERT INTO cliente values (2,'Willian Zamalloa'); --Tabla Venta INSERT INTO venta values(1,GETDATE(),1); INSERT INTO venta values(2,GETDATE(),1); INSERT INTO venta values(3,GETDATE(),1); INSERT INTO venta values(4,GETDATE(),2); --Tabla Detalle_venta INSERT INTO detalle_venta values(1,'p1',5,5,1); INSERT INTO detalle_venta values(2,'p2',12,5,1); INSERT INTO detalle_venta values(3,'p3',7,5,1); INSERT INTO detalle_venta values(4,'p1',4,5,2); INSERT INTO detalle_venta values(5,'p2',3,5,2); INSERT INTO detalle_venta values(6,'p1',2,5,3); INSERT INTO detalle_venta values(7,'p2',10,5,3); INSERT INTO detalle_venta values(8,'p1',12,5,4); INSERT INTO detalle_venta values(9,'p2',1,5,4); INSERT INTO detalle_venta values(10,'p3',3,5,4);
--/*Modo Raw: cada fila de la consulta es un elemnto XML SELECT id_cliente,nombres FROM cliente FOR XML RAW
--1)Mostrar la relacion de nombres de los productos que haya adquirido el cliente con codigo 2 SELECT producto FROM venta V inner join detalle_venta DV ON V.id_venta = DV.id_venta WHERE V.id_cliente = 2 FOR XML RAW
--Modo RAR, ELEMENTS:cada elemento de la columna de la consulta es un elemento XML SELECT id_cliente,nombres FROM cliente FOR XML RAW, ELEMENTS
/*4.- FOR XML AUTO*/ --Modo AUTO: Identico a RAW para una sola tabla SELECT id_cliente,nombres FROM cliente FOR XML AUTO
--mODO AUTO: Crea elementos XML anidados cuando hay un JOIN SELECT v.id_venta,v.fecha,d.id_detalle,d.producto,d.cantidad,d.precio FROM venta v inner join detalle_venta d ON v.id_venta = d.id_venta FOR XML AUTO
--mODO AUTO: Crea elementos XML anidados cuando hay un JOIN SELECT v.id_venta,v.fecha,d.id_detalle,d.producto,d.cantidad,d.precio FROM venta v inner join detalle_venta d ON v.id_venta = d.id_venta FOR XML AUTO
--PROPUETO2 SELECT C.id_cliente,C.nombres,V.id_venta,V.fecha FROM cliente C inner join venta V ON C.id_cliente = v.id_cliente FOR XML AUTO
--3)Mostrar el nombre del cliente, fecha en la que realizo la compra, --el nombre del producto, cantidad y precio que haya adquirido el --cliente con codigo1, utilizar el modo XML auto
SELECT c.nombres,v.fecha,dv.producto,dv.cantidad,dv.precio FROM detalle_venta dv , cliente c inner join venta v ON c.id_cliente = v.id_cliente where c.id_cliente ='1' and v.id_venta = dv.id_venta FOR XML AUTO
--5.- FOR XML EXPLICIT /*mODO EXPLICIT: define el XML a*/ -- traves de una tabla universal select 1 as tag, null as parent, v.id_venta [venta!1!IdVenta], v.fecha [venta!1!Fecha!Element] from venta v FOR XML EXPLICIT
--4 construir la consulta adecuada que me muestre la siguiente estructura -- utilizando el modo XML EXPLICIT select 1 as tag, null as parent, v.id_venta [venta!1!IdVenta], v.fecha [venta!1!Fecha!Element], v.id_cliente [venta!1!IdCliente!Element] from venta v FOR XML EXPLICIT
--6.- Configuracion de columnas en FOR XML XPATH /*Modo PATH: Define el formato XML a traves de XPATH*/ select id_venta "@IDVenta", fecha "Categoria/fecha_ingreso" from venta FOR XML PATH('venta') go
select id_cliente "Datos/@dni", nombres "Datos/nombre" from cliente FOR XML PATH ('cliente') go
/*Modo PATH:Define el formato XML dentro de un elemento*/ select v.id_cliente "@IDVenta", v.fecha "Categoria/Fecha_ingreso" from venta v FOR XML PATH('Tienda'), root('FACTURAS')